Mybatis-Plus 版本升级日志(3.1.0 -> 3.5.1)
前言
最近看了下mp的官网更新日志,版本已经更新到3.5.1了(2022.01.25),优化了不少地方,之前太忙没时间升级,最近有闲下来时间那就搞一搞。
具体操作
1.pom修改
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>
2.yml配置(基本没有变化,删除了id-type配置)
mybatis-plus: # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapper-locations: your.mapper.package #实体扫描 typeAliasesPackage: your.entity.package global-config: # 数据库相关配置 db-config: #字段策略 IGNORED:"忽略判断", NOT_NULL:"非 NULL 判断", NOT_EMPTY:"非空判断" field-strategy: not_empty #驼峰下划线转换 column-underline: true #数据库大写下划线转换 capital-mode: true #table-prefix: sys_ #逻辑删除配置 logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 # 数据库类型 db-type: mysql #刷新mapper 调试神器 refresh: true # 原生配置 configuration: map-underscore-to-camel-case: true cache-enabled: false # 打印sql日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.插件配置
新版插件使用拦截器方式来配置
@Configuration @MapperScan({"scan.your.mapper.package"}) public class MybatisPlusConfig { /** * 3.3.0之后的新版插件配置 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //分页插件(根据实际情况指定数据库类型,具体查看DbType枚举) interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); //逻辑删除插件不需要再单独配置 //防止全表更新 //interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false //paginationInnerInterceptor.setOverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 //paginationInnerInterceptor.setMaxLimit(500L); return interceptor; } }
4.自定义自动填充字段处理器
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(), metaObject); } }
5.Entity基类
public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; /** 主键id @JSONField该注解是解决Long类型太长传值前端精度丢失 */ /** id生成算法 ASSIGN_ID(雪花算法) (新版本去掉了id_woker)这里配置了以后yml配置文件里无需再指定id-type,其他id生成方式查看IdType枚举 */ @JSONField(serializeUsing= ToStringSerializer.class) @TableId(value = "id", type = IdType.ASSIGN_ID) private Long id; /** 创建时间 插入自动填充 */ @TableField(fill = FieldFill.INSERT) private Date createTime; /** 更新时间 插入和更新自动填充 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;/** 逻辑删除 0:正常 1:删除 (新版本只需在此配置即可) */ @TableLogic private Integer deleted; /** 乐观锁 */ @Version private Integer version; }
6.count()方法
//count()方法返回值类型从int改为long Long count = baseMapper.selectCount(query);