目的
主要目的就是为了加深记忆,同时梳理整个配置过程。方便后续翻阅排查问题。关注公众号:庄智曰。阅读要求,对SpringBoot和MyBatisPlus有基本的认识和使用经验
版本信息
SpringBoot 3.3.5
MybatisPlus 3.5.7
MySQL 8.0
整体步骤
- 引入MybatisPlus的maven坐标
- 配置数据源以及引入数据库驱动maven坐标
- 配置mybatis-plus的相关配置
- 编译打包xml文件被过滤问题处理
- 扫码映射器类(xxxMapper)注解配置
- 模版代码自动生成配置
- 自定义代码模版(可选)
- MyBatisPlus常见配置最佳实践(可选)
详细步骤
引入MybatisPlus及MySQL数据库驱动maven坐标
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
配置数据源
# application.yml
# 数据源配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: xxx
url: jdbc:mysql://localhost:3306/xx?useSSL=false&serverTimezone=GMT
配置mybatis-plus的相关配置
# application.yml
# MyBatis-plus配置
mybatis-plus:
# 搜索指定包别名 可选
type-aliases-package: cn.qx.module.**.entity
# 配置mapper的扫描,找到所有的mapper.xml映射文件 可选 没有自定义sql可以不配置
mapper-locations: classpath*:/cn/qx/module/**/mapper/xml/*Mapper.xml
# 加载全局的配置文件 可选
config-location: classpath:mybatis/mybatis-config.xml
说明
mapperLocations配置指定的位置是是在src/main/java下(假设这里为cn.qx.module.user.mapper.xml),这里也有把所有xml文件都放在src/main/resources文件夹,也可以。
位置放哪里都可以,只要指定位置配置对即可。
至于为什么这里放在src/main/java下。考虑主要是相关模块的资源放在同一个包下,这里把映射器(xml文件)和映射器类(xxMapper)放在同一个模块,利于维护和重构。
但是这样带来的问题是xml文件在编译后是无法复制到编译后的target文件夹下。解决方式看下一步
这里附上一个mybatis-config.xml示例配置,详情可以看官网
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 全局参数 -->
<settings>
<!-- 使全局的映射器启用或禁用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 允许JDBC 支持自动生成主键 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!-- 指定 MyBatis 所用日志的具体实现 -->
<setting name="logImpl" value="SLF4J" />
<!-- 使用驼峰命名法转换字段 -->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
</settings>
</configuration>
编译打包xml文件被过滤问题处理
指定编译后,对应的xml文件也需要复制,默认是不会复制xml格式的文件。所以需要明确配置复制
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
这里要配置src/main/resources这个文件夹,不然我们的配置会覆盖原来的配置,导致resources文件夹下的文件没有复制到target。
扫描映射器类(xxxMapper)注解配置
这里主要有两种方式,个人更偏向第一种
方式一
这里支持通配符**多级目录,以及*一级目录,(早期版本好像不支持通配符,也有可能是当时设置问题导致,不纠结了,反正现在可以支持)
@MapperScan("cn.qx.module.**.mapper")
方式二
不配置@MapperScan,但在每个xxxMapper接口上加上注解
@Mapper
注意事项
- 没配置@MapperScan,则默认的扫描路径和SpringBoot扫描组件(@Component @Service等组件)的路径一样,但是映射器XXMapper类需要添加接口@Mapper注解
- 自定义配置@MapperScan路径,则扫描用户自己配置的路径,XXMapper类可以不用配置@Mapper注解,但要注意配置的扫描路径,不要包含其他非XXMapper的接口,(举例:扫码路径包含了IUserService业务服务类接口是不对的,会导致有多个IUserService实例)
模版代码自动生成配置
个人建议把这块生成代码放到src/test/java/下,同时坐标的作用范围都是test
引入相关maven坐标
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
<scope>test</scope>
</dependency>
生成代码
拷贝官网代码,根据自己需求改改,
代码不难,语义都很明确。
FastAutoGenerator.create("jdbc:mysql://localhost:3306/xx?useSSL=false", "root", "xxxx")
.globalConfig(builder -> builder
.author("Ash")
.outputDir(Paths.get(System.getProperty("user.dir")) + "/src/main/java")
.commentDate("yyyy-MM-dd")
)
.packageConfig(builder -> builder
.parent("cn.qx.module")
.moduleName("member")
.entity("entity")
.mapper("mapper")
.xml("mapper.xml")
.service("service")
.serviceImpl("service.impl")
)
.strategyConfig(builder -> builder
.addInclude("qx_member_info","qx_member_info_extend")
.addTablePrefix("qx_")
.entityBuilder()
.enableLombok()
)
.templateEngine(new FreemarkerTemplateEngine())
.execute();
自定义代码模版(可选)
这部分先不写,点赞数超过 100,在来补充,欢迎关注公众号进行催更:庄智曰
MyBatisPlus常见配置最佳实践(可选)
略