mybatis-plus-扩展使用
1.开启日志功能,在yml配置文件添加配置
1 2 3 | mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl |
2.主键生成策略, 在主键ID上添加注解即可,关于id生成的一些策略:https://www.cnblogs.com/haoxinyue/p/5208136.html
1 2 3 | // 默认 ID_WORKER @TableId (type = IdType.ID_WORKER_STR) private Long id; |
1 | public enum IdType { <br> // 自增<br> AUTO(0),<br> NONE(1), <br> // 手动输入 <br> INPUT(2), <br> // 唯一id生成器 <br> ID_WORKER(3),<br> // uuid <br> UUID(4), <br> // 唯一id生成器(字符串类型) <br> ID_WORKER_STR(5); } |
3.更新策略,数据添加两个时间字段,create_time、update_time 添加时间、修改时间,添加时间字段、注解,编写注解的处理器
1 2 3 4 5 | // 时间的操作(自动更新) @TableField (fill = FieldFill.INSERT) private Date createTime; @TableField (fill = FieldFill.INSERT_UPDATE) private Date updateTime; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; // MetaObjectHandler 元对象处理 @Component public class MyMetaObjectHandler implements MetaObjectHandler { // 插入的策略 @Override public void insertFill(MetaObject metaObject) { // this.setFieldValByName()设置当前字段的值! // String fieldName, Object fieldVal, MetaObject metaObject // 以后只要是插入操作就会自动控制 // createTime updateTime 使用 new Date() 进行填充 this .setFieldValByName( "createTime" , new Date(),metaObject); this .setFieldValByName( "updateTime" , new Date(),metaObject); } // 更新策略 @Override public void updateFill(MetaObject metaObject) { this .setFieldValByName( "updateTime" , new Date(),metaObject); } } |
4.乐观锁,数据库添加version字段(int)version,添加version注解到字段上面,添加 乐观锁插件即可,就自动带上了版本号
1 2 | @Version private Integer version; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class MPconfig { // 注入人家写好的插件处理器 // 本质是一个拦截器 Interceptor @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } } |
5.分页查询
在上面的 MPconfig 添加插件
1 2 3 4 5 | // 分页插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } |
6.逻辑删除Delete,数据添加字段(int)deleted,实体类添加字段及注解
在上面的 MPconfig 添加插件
1 2 | @TableLogic // 逻辑删除字段! private Integer deleted; |
1 2 3 4 5 | // 逻辑删除插件! @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } |
7.性能分析
在上面的 MPconfig 添加插件
1 2 3 4 5 6 7 8 9 10 | // SQL执行效率插件 @Bean @Profile ({ "dev" , "test" }) // 设置 dev test 环境开启 public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); // 允许执行的sql的最长时间 , 默认的单位是ms performanceInterceptor.setMaxTime( 1000 ); performanceInterceptor.setFormat( true ); // 格式化SQL代码 return performanceInterceptor; } |
最后完整的插件配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class MPconfig { // 注入人家写好的插件处理器 // 本质是一个拦截器 Interceptor @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } // 分页插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } // 逻辑删除插件! @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } // SQL执行效率插件 @Bean @Profile ({ "dev" , "test" }) // 设置 dev test 环境开启 public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); // 允许执行的sql的最长时间 , 默认的单位是ms performanceInterceptor.setMaxTime( 1000 ); performanceInterceptor.setFormat( true ); // 格式化SQL代码 return performanceInterceptor; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?