MyBatisPlus_SpringBoot配置指南

目的

主要目的就是为了加深记忆,同时梳理整个配置过程。方便后续翻阅排查问题。关注公众号:庄智曰。阅读要求,对SpringBoot和MyBatisPlus有基本的认识和使用经验

版本信息

SpringBoot 3.3.5
MybatisPlus 3.5.7
MySQL 8.0

整体步骤

  1. 引入MybatisPlus的maven坐标
  2. 配置数据源以及引入数据库驱动maven坐标
  3. 配置mybatis-plus的相关配置
  4. 编译打包xml文件被过滤问题处理
  5. 扫码映射器类(xxxMapper)注解配置
  6. 模版代码自动生成配置
  7. 自定义代码模版(可选)
  8. 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

注意事项

  1. 没配置@MapperScan,则默认的扫描路径和SpringBoot扫描组件(@Component @Service等组件)的路径一样,但是映射器XXMapper类需要添加接口@Mapper注解
  2. 自定义配置@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常见配置最佳实践(可选)

参考文献

Mybatis官网配置说明
MybatisPlus快速开始
MybatisPlus模版代码生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AshCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值