前言
项目之前使用的是mybatis,想引入mybatis-plus直接全部替换,工作量大不太可行,因此保留原有功能,引入mybatis-plus,因此有了以下操作。
一、Mybatis-Plus特性
Mybatis-Plus是一个 Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性:
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
二、Mybatis替换为Mybatis-Plus
将Mybatis替换为Mybatis-Plus主要有以下几个步骤:
1.引入mybatis-plus包
<!-- SpringBoot集成mybatis plus框架 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency>
版本可以用最新版,这里引入的是3.4.1
2.修改yml文件
mybatis-plus: type-aliases-package: entityPackage # 所有Entity所在包 mapper-locations: - classpath:mybatis/mapper/*/*.xml # mapper映射文件 configuration: mapUnderscoreToCamelCase: true
Entity所在包改为自己的包名即可
3.mybatis版本冲突
在使用mybatis的时候引入了pagehelper分页插件,pagehelper中有引入mybatis包这里要注意跟mybatis-plus版本引入的mybatis包冲突,会导致项目报错。按上面的mybatis-plus版本这里修改到1.3.0版本 项目正常启动(ps:之前1.2.5版本时会报错)
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
4.引入代码生成器插件
<!-- mybatis-plus代码自动生成工具 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency>
在mybatis-plus网站有对代码生成器不同版本使用接口的介绍,这里用的3.5.1版本直接用新的代码生成器即可:
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("baomidou") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_simple") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
里面配置的生成路径和包名以及数据库修改成自己的即可。
5.引入mybatis-plus分页工具
<!--mybatis-plus分页插件--> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>3.2</version> </dependency>
之前的pagehelper中也会引用jsqlparser包,这里要注意下版本冲突,
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency>
pagehelper之前5.1.2版本是有冲突的,改成5.2.0冲突解决。加上插件配置代码即可:
@Configuration
public class MybatisPlusConfig {
/**
* 新版的插件配置
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setMaxLimit(-1L);
// 分页插件
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
// 乐观锁插件
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
// 防止全表更新与删除插件
mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return mybatisPlusInterceptor;
}
}
至此mybatis替换mybatis-plus完成,启动项目正常。
三、Mybatis-Plus应用
当我们新建一张表再使用代码生成器自动生成代码后,我们可以直接使用CRUD接口,无需再自己开发,省去了很多时间。另外mybatis-plus里的语法应用直接参考官网说明即可,孰能生巧,多用几次,就熟了。