MyBatis-Plus 是 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
他的特点是无侵入,不影响项目里原有的MyBatis写法规则
损耗小,增强crud操作且性能几乎保持
内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,简单sql操作即可用一行代码实现
集成各类插件:代码生成器、内置分页插件、内置性能分析插件、内置全局拦截插件等等
下面开始集成:
一、加入Mybatis-Plus依赖
本案例集成的springboot版本为2.1.18
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.1</version>
</dependency>
尽量选择3.4.1,低版本xml里动态语句如果使用if条件语句,参数在mapper接口需加@params注解,即使方法只有一个参数。3.4.1版本方法只有一个参数时则无需加@params注解
二、修改application.yml配置
本案例是在已有mybatis基础上再集成mybatis-plus,所以MyBatis配置需要注释掉,
注意mapper-locations、config-location参数的值,他们分别是项目对应的XXXXmapper.xml映射文件位置和mybatis-config.xml配置文件位置
type-aliases-package为mapper接口的包路径
# MyBatis配置
# mybatis:
# 搜索指定包别名
# typeAliasesPackage: com.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
# mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
# configLocation: classpath:mybatis/mybatis-config.xml
# MyBatis-plus配置
mybatis-plus:
global-config:
db-config:
id-type: auto
field-strategy: not_empty
table-underline: true
db-type: mysql
logic-delete-value: 1
logic-not-delete-value: 0
column-underline: true
type-aliases-package: com.**.domain
mapper-locations: classpath*:mapper/**/*Mapper.xml
config-location: classpath:mybatis/mybatis-config.xml
三、配置MyBatisConfig
修改sqlSessionFactory这个Bean,这个Bean主要是配置sessionFactory,将配置信息换成MyBatis-plus所需配置
SqlSessionFactoryBean换成MybatisSqlSessionFactoryBean
//@Bean
// public SqlSessionFactory sqlSessionFactory(DataSource //dataSource) throws Exception {
// String typeAliasesPackage = //env.getProperty("mybatis.typeAliasesPackage");
// String mapperLocations = env.getProperty("mybatis.mapperLocations");
// String configLocation = env.getProperty("mybatis.configLocation");
// typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
// VFS.addImplClass(SpringBootVFS.class);
// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
// sessionFactory.setDataSource(dataSource);
// sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
//sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
// sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
// return sessionFactory.getObject();
// }
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
String typeAliasesPackage = env.getProperty("mybatis-plus.type-aliases-package");
String mapperLocations = env.getProperty("mybatis-plus.mapper-locations");
String configLocation = env.getProperty("mybatis-plus.config-location");
typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
VFS.addImplClass(SpringBootVFS.class);
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
return sessionFactory.getObject();
}
到此就已经集成完成,重启项目,参考官方提供的接口就可以快速实现数据操作了
整合后可能出现的问题解决方案
1.curd操作报错:nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),
如果没集成前curd操作正常,集成后出现这个错误请仔细检查application.yml中新增的几个参数配置
2.集成后部分curd报错:net.sf.jsqlparser.statement.select.PlainSelect.getGroupBy()Lnet/sf/jsqlparse
此异常是查询结果进行分页时异常,通过maven依赖树,查看com.github.pagehelper分页插件依赖和com.github.jsqlparser依赖的版本兼容。是否有重复依赖和覆盖依赖导致兼容问题
本案例出现这个错误,强制指定com.github.jsqlparser依赖为3.2问题解决,之前是1.3报错
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.2</version>
</dependency>
mybatis-plus官方帮助文档地址:
https://mybatis.plus/
----------------- 文章如有问题,请下方回复指出,感谢查阅😁 -----------------