当前位置: 首页 > wzjs >正文

罗湖区做网站的公司专业网络推广软件

罗湖区做网站的公司,专业网络推广软件,利用网站宣传 两学一做,人工智能搭建一、快速入门 1.引入相关依赖 2.定义Mapper接口并继承BaseMapper 二、常见注解 1.MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息 2.TableName:用来指定表名 3.TableId:用来指定表中的关键字段信息 4.TableField:用来指定表中的普通字段信…

一、快速入门

1.引入相关依赖

2.定义Mapper接口并继承BaseMapper

 二、常见注解

1.MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息

2.@TableName:用来指定表名

3.@TableId:用来指定表中的关键字段信息

4.@TableField:用来指定表中的普通字段信息

    

三、常见配置

四、条件构造器

注意:

1.QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分

2.UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用

3.尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

五、自定义SQL

利用MyBatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩下的部分

1.基于Wrapper构建where条件

2.在mapper方法参数用Param注解声明Wrapper变量名称,必须是ew

3.自定义SQL,并实用Wrapper条件

 六、IService接口

1、继承实现结构

2、Lambda

查询相关操作:

@Overridepublic  List<User> complexSearch(String name, Integer status, Integer minBalance, Integer maxBalance) {return lambdaQuery().like(name != null, User::getUsername, name).eq(status != null, User::getStatus, status).ge(minBalance != null, User::getBalance, minBalance).le(maxBalance != null, User::getBalance, maxBalance).list();}

更新相关操作:

@Overridepublic void minusMoneyById(Long id, Long money) {//通过id查找用户User userById = this.getById(id);if (userById == null) {throw new RuntimeException("扣减失败,用户不存在");}//判断用户状态if (userById.getStatus() == 2) {throw new RuntimeException("扣减失败,用户被冻结");}//判断账户余额if (userById.getBalance() == 0 || userById.getBalance() < money) {throw new RuntimeException("扣减失败,余额不足");}long updateBalance = userById.getBalance() - money;//baseMapper.minusMoneyById(id, money);lambdaUpdate().set(User::getBalance, updateBalance).set(updateBalance==0,User::getStatus,2).eq(User::getId,id).update();}

批量新增相关操作:

开启rewriteBatchedStatements=true

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true

3、静态工具

相关依赖:

        <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version></dependency>

相关代码:

 @Overridepublic UserVO selectUserAndAddress(Long id) {//根据id查询用户UserVO userVO = new UserVO();User selectUserById = this.lambdaQuery().eq(User::getId, id).one();if (selectUserById == null||selectUserById.getStatus() == 2) {throw new RuntimeException("用户状态异常");}BeanUtils.copyProperties(selectUserById, userVO);//根据用户id查询地址List<Address> adressList = Db.lambdaQuery(Address.class).eq(Address::getUserId, id).list();if (adressList != null && adressList.size() > 0) {ArrayList<AddressVO> addressVOS = new ArrayList<>();for (Address address : adressList) {AddressVO addressVO = new AddressVO();BeanUtils.copyProperties(address, addressVO);addressVOS.add(addressVO);}userVO.setAddresses(addressVOS);}return userVO;}

4、逻辑删除

逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据

缺点:使用逻辑删除后,会导致数据库表垃圾数据越来越多,SQL中全都需要对逻辑删除字段做判断,影响查询效率

5、枚举处理器

mybatisPlus提供了一个处理枚举的类型转换器,可以帮我们把枚举类型与数据库类型自动转换。

定义枚举:

package com.itheima.mp.enums;import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;public enum UserStatus {Normal(1,"正常"),FROZON(2,"冻结"),;@EnumValueprivate final int value;@JsonValueprivate final String desc;UserStatus(int value, String desc) {this.value = value;this.desc = desc;}
}

配置枚举处理器:

mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

6、Json处理器

将数据库中字符串的数据转换为实体对象

定义实体类:

package com.itheima.mp.domain.po;import lombok.Data;@Data
public class UserInfo {private Integer age;private String intro;private String gender;
}

使用处理器:

package com.itheima.mp.domain.po;import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.itheima.mp.enums.UserStatus;
import lombok.Data;import java.time.LocalDateTime;@Data
// @TableName(value = "myuser")
@TableName( autoResultMap = true)
public class User {/*** 用户id*/@TableId(type = IdType.AUTO)private Long id;/*** 用户名*/private String username;/*** 密码*/private String password;/*** 注册手机号*/private String phone;/*** 详细信息*///private String info;@TableField(typeHandler = JacksonTypeHandler.class)private UserInfo info;/*** 使用状态(1正常 2冻结)*///@TableField(value = "status")private UserStatus status;/*** 账户余额*///@TableField(exist = false)private Integer balance;/*** 创建时间*/private LocalDateTime createTime;/*** 更新时间*/private LocalDateTime updateTime;
}

7、分页插件

配置插件:

package com.itheima.mp.domain.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){// 初始化核心插件MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 添加分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}

分页API:

 @Testvoid testPage(){Page<User> myPage = Page.of(3, 2);Page<User> pageFromDatabase = userServiceImpl.page(myPage);for (User user : pageFromDatabase.getRecords()) {System.out.println(user);}}

分页参数实体:

package com.itheima.mp.domain.query;import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
@ApiModel(description = "分页查询相关实体")
public class PageQuery {@ApiModelProperty("页码")private Integer pageNo=1;@ApiModelProperty("页码")private Integer pageSize=5;@ApiModelProperty("牌序字段")private String sortBy;@ApiModelProperty("是否升序")private Boolean isAsc;public <T> Page<T> toMpPage(OrderItem ... orderItems) {//分页条件Page<T> page = Page.of(pageNo, pageSize);//排序依靠、排序方式//排序字段不为空if  (StrUtil.isNotBlank(sortBy)) {page.addOrder(new OrderItem().setColumn(sortBy).setAsc(isAsc));}else {page.addOrder(orderItems);}return page;}public <T> Page<T> toMpPageDefaultOrderByCreateTime(){return toMpPage(new OrderItem().setColumn("create_time").setAsc(false));}public <T> Page<T> toMpPageDefaultOrderByUpdateTime(){return toMpPage(new OrderItem().setColumn("update_time").setAsc(false));}public <T> Page<T> toMpPage(String sortBy, Boolean isAsc) {return toMpPage(new OrderItem().setColumn(sortBy).setAsc(isAsc));}
}

实体类继承分页参数实体:

package com.itheima.mp.domain.query;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
@ApiModel(description = "用户查询条件实体")
public class UserQuery extends PageQuery {@ApiModelProperty("用户名关键字")private String name;@ApiModelProperty("用户状态:1-正常,2-冻结")private Integer status;@ApiModelProperty("余额最小值")private Integer minBalance;@ApiModelProperty("余额最大值")private Integer maxBalance;}

统一响应返回实体:

package com.itheima.mp.domain.dto;import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageDTO<V> {private Long total;private Long pages;private List<V> list;/*** 返回空分页结果* @param p MybatisPlus的分页结果* @param <V> 目标VO类型* @param <P> 原始PO类型* @return VO的分页对象*/public static <V, P> PageDTO<V> empty(Page<P> p){return new PageDTO<>(p.getTotal(), p.getPages(), Collections.emptyList());}/*** 将MybatisPlus分页结果转为 VO分页结果* @param p MybatisPlus的分页结果* @param voClass 目标VO类型的字节码* @param <V> 目标VO类型* @param <P> 原始PO类型* @return VO的分页对象*/public static <V, P> PageDTO<V> of(Page<P> p, Class<V> voClass) {// 1.非空校验List<P> records = p.getRecords();if (records == null || records.size() <= 0) {// 无数据,返回空结果return empty(p);}// 2.数据转换List<V> vos = BeanUtil.copyToList(records, voClass);// 3.封装返回return new PageDTO<>(p.getTotal(), p.getPages(), vos);}/*** 将MybatisPlus分页结果转为 VO分页结果,允许用户自定义PO到VO的转换方式* @param p MybatisPlus的分页结果* @param convertor PO到VO的转换函数* @param <V> 目标VO类型* @param <P> 原始PO类型* @return VO的分页对象*/public static <V, P> PageDTO<V> of(Page<P> p, Function<P, V> convertor) {// 1.非空校验List<P> records = p.getRecords();if (records == null || records.size() <= 0) {// 无数据,返回空结果return empty(p);}// 2.数据转换List<V> vos = records.stream().map(convertor).collect(Collectors.toList());// 3.封装返回return new PageDTO<>(p.getTotal(), p.getPages(), vos);}
}

http://www.dtcms.com/wzjs/119711.html

相关文章:

  • 怎么做教育类型的网站开个网站平台要多少钱
  • 做暖暖小视频免费网站广告关键词查询
  • 做好网站培训网登录入口
  • 网站开发与设计的实训场地seo优化范畴
  • 如何设计app搜索引擎简称seo
  • 网站开发任务清单全网关键词搜索
  • 镇江门户网网站优化技巧
  • 长沙门户网站seo发展前景怎么样啊
  • 一键免费做网站北京外贸网站优化
  • 营销型网站设计工资网络营销产品策略
  • 无锡市城市建设规划局网站seo文章关键词怎么优化
  • 虚拟机web网站怎么做台州网站建设方案推广
  • 旅游类网站做百度竞价安阳seo
  • 网站建设网站规划书专业做网站
  • 网站设计师前景企业关键词优化价格
  • 公司没有网站如何做外贸在线教育
  • 云南网站建设的价值今天的热搜榜
  • 网站的兼容性收录好的网站有哪些
  • 网站制作好以后怎么管理河南郑州网站顾问
  • 色情网站 后缀gr万能搜索引擎
  • 珠海建站联系方式seo基础入门视频教程
  • 徐州 商城网站设计湖南企业seo优化
  • 自己做的网站怎么连接域名网站建设公司大全
  • 成都手机网站制作武汉seo搜索引擎
  • 网站制作代理加盟灰色项目推广渠道
  • 模板的网站都有哪些内容互联网公司排名2021
  • b2b商务平台排名百度seo工作室
  • 网站代码建设+实例营销型网站策划方案
  • 精品课程网站开发项目公众号推广合作平台
  • 第一网站ppt模板免费下载营销课程培训视频