MybatisPlus使用
- 导入maven依赖
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>
- 创建Mapper接口和Mapper.xml映射文件,继承BaseMapper<ClassName>
@Repository //表示持久层 public interface SysUserMapper extends BaseMapper<SysUser> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.liuy.employeesys.mapper.SysUserMapper"> </mapper>
- 在MybatisPlusConfig配置类上添加@MapperScan(“com.liuy”)扫描Mapper
4.项目配置文件中配置日志输出@Configuration @MapperScan("com.liuy.employeesys.mapper") public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
#Mybatis-plus配置 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
CRUD
-
条件查询
//设置查询条件 QueryWrapper<SysUser> wrapper=new QueryWrapper<>(); /** * eq 等于 * ne 不等于 * gt 大于 * ge 大于等于 * lt 小于 * le 小于等于 * between between a and b * notBetween Not between a and b * like like '%值%' * notLike not like '%值%' * likeLeft like '%值' * likeRight like '值%' */ wrapper.eq("username",userReq.getUsername()); SysUser sysUser = sysUserMapper.selectOne(wrapper);
-
insert–自动生成主键ID
插入数据时,插入对象的ID为空时,自动填充不做指定Id生成,默认IdType.NONE,为用户输入Id
指定Id生成算法:@TableId(type=IdType.AUTO)数据实现自增
雪花算法生成long型64位Id号: 1bit符号位 + 41bit时间戳 + 10bit机器Id + 12bit数据Id
/** * 分配ID (主键类型为number或string), * 默认实现类 {DefaultIdentifierGenerator}(雪花算法) */ ASSIGN_ID(3), /** * 分配UUID (主键类型为 string) * 默认实现类 {DefaultIdentifierGenerator}(UUID.replace("-","")) */ ASSIGN_UUID(4),
-
update自动填充创建时间,修改时间 create_time,update_time
@TableField(fill=FieldFill.Insert) 插入时填充create_time.
@TableField(fill=FieldFill.Insert_update) 插入更新时填充create_time,update_time.实现MetaObjectHandler接口—>元对象字段填充控制器抽象类
实现公共字段自动写入,在作为组件装载到Bean@Component.乐观锁:执行任务中全程不加锁,当发生问题,更新值再次测试
悲观锁:执行任务全程加锁,再操作
乐观锁实现方式:取出记录,获取当前version;更新时带上version;执行更新时验证这个是否是老的version;如果不是就更新失败。添加version字段默认1;
实体类注解@version
配置类注入Bean:MybatisPlusInterceptor,add(OptimisticLockerInnerInterceptor) -
delete 逻辑删除,deleted默认0 -----删除---->1
实体类deleted字段 注解@TableLogic
逻辑删除Bean: LogicDeleteByIdWithFill
配置文件中配置逻辑删除默认值#Mybatis-plus配置 mybatis-plus: global-config: db-config: logic-delete-value: 0 logic-not-delete-value: 1
分页
-
分页拦截器PaginationInnerInterceptor
默认对 left join 进行优化,虽然能优化count,但是加上分页的话如果1对多本身结果条数就是不正确的配置类中注入Bean:PaginationInnerInterceptor
Page<User>(page,size);
性能分析插件
输出每条SQL执行时间,只在开发环境下有效
IllegalSQLInnerInterceptor拦截SQL,提出优化建议
spring.profile.active=dev