SpringBoot 整合MyBatisPlus

简介

MyBatis Plus(也称为MyBatis+)是MyBatis框架的增强版本,MyBatis是一种流行的轻量级Java持久化框架。MyBatis Plus提供了额外的功能,并简化了对MyBatis的使用,使得在Java应用程序中使用数据库更加便捷。

官方文档:https://baomidou.com/

Maven仓库地址:https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter

整合步骤

1. 导入 MyBatisPlus 所需要的依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.liming</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis-plus</name>
    <description>springboot整合mp</description>

    <properties>
        <java.version>1.8</java.version>
        <log4j.version>1.2.17</log4j.version>
        <druid.version>1.2.8</druid.version>
        <mybatisplus.version>3.4.2</mybatisplus.version>
    </properties>

    <dependencies>
        <!--web启动依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.配置数据库连接信息

yml 复制代码
server:
  port: 9000
#####数据源配置#####
spring:
  datasource:
    username: root
    password: 123456
    #serverTimezone=UTC解决时区的报错
    url: jdbc:mysql://localhost:3306/db_authority_system?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #druid 数据源专有配置
    initialSize: 5 #连接池的初始大小
    minIdle: 5 #连接池中最小空闲连接数量
    maxActive: 20 #连接池中最大活跃连接数量
    maxWait: 60000 #获取连接的最大等待时间
    timeBetweenEvictionRunsMillis: 60000 #定期检查连接池中空闲连接的间隔时间
    minEvictableIdleTimeMillis: 300000 #连接池中连接的最小空闲时间
    validationQuery: SELECT 1 FROM DUAL #校验连接是否有效的SQL查询语句
    #连接返回时是否进行测试
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    #是否缓存PreparedStatement
    poolPreparedStatements: true
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20 #每个连接上缓存PreparedStatement的最大数量。
    useGlobalDataSourceStat: true #是否开启全局监控统计功能
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#####mybatisplus配置#####
mybatis-plus:
  #加载映射文件
  mapper-locations: classpath:mapper/*.xml
  #设置别名
  type-aliases-package: com.liming.entity
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#####配置日志#####
logging:
  config: classpath:logback.xml
  #设置日志级别的节点
  level:
    com:
      liming: debug

3.MybatisX插件快速生成代码

首先使用IDEA连接mysql

找到表右键,选择插件的逆向工程选项

编写逆向工程配置信息

4.MybatisX插件生成代码的模板配置

  • 按照指定目录找到插件模板配置目录 Scratches and Consoles -> Extensions -> MybatisX
  • 这里会提供默认模板: 例如在 1.4.13 提供了模板: default-all,default,mybatis-plus2,mybatis-plus3
  • 如果想重置默认模板, 可以右键点击 MybatisX 目录,选择 Restore Default Extensions 选项

    自定义模板内容
名称 含义
tableClass.fullClassName 类的全称(包括包名)
tableClass.shortClassName 类的简称
tableClass.tableName 表名
tableClass.pkFields 表的所有主键字段
tableClass.allFields 表的所有字段
tableClass.baseFields 排除主键和 blob 的所有字段
tableClass.baseBlobFields 排除主键的所有字段
tableClass.remark 表注释

更多信息大家可以查看官网获取

4.generator批量生成代码

pom

xml 复制代码
<!--代码生成-->
<dependency>
   <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>
<!--freemarker模板-->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.28</version>
</dependency>

编写核心模板

java 复制代码
package com.liming.utils;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

public class GeneratorCode {
    private static String author ="liming";//作者名称
    private static String outputDir ="D:\\";//生成的位置
    private static String driver ="com.mysql.cj.jdbc.Driver";//驱动,注意版本
    //连接路径,注意修改数据库名称
    private static String url ="jdbc:mysql://localhost:3306/db_authority_system?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
    private static String username ="root";//数据库用户名
    private static String password ="123456";//数据库密码
    private static String tablePrefix ="sys_";//数据库表的前缀,如t_user
    private static String [] tables = {"sys_user","sys_permission","sys_department"};   //生成的表
    private static String parentPackage = "com.liming";//顶级包结构
    private static String mapper = "mapper";//数据访问层包名称
    private static String service = "service";//业务逻辑层包名称
    private static String entity = "entity";//实体层包名称
    private static String controller = "controller";//控制器层包名称
    private static String mapperxml = "mapper";//mapper映射文件包名称

    public static void main(String[] args) {
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setAuthor(author) // 作者
                .setOutputDir(outputDir) // 生成路径
                .setFileOverride(true)  // 文件覆盖
                .setIdType(IdType.AUTO) // 主键策略
                .setServiceName("%sService")  // 设置生成的service接口的名字的首字母是否为I,加%s则不生成I
                .setBaseResultMap(true)    //映射文件中是否生成ResultMap配置
                .setBaseColumnList(true);  //生成通用sql字段

        //2. 数据源配置
        DataSourceConfig dsConfig  = new DataSourceConfig();
        dsConfig.setDbType(DbType.MYSQL)  // 设置数据库类型
                .setDriverName(driver) //设置驱动
                .setUrl(url)         //设置连接路径
                .setUsername(username) //设置用户名
                .setPassword(password);    //设置密码

        //3. 策略配置
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setCapitalMode(true) //全局大写命名
                .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
                .setTablePrefix(tablePrefix) //表前缀
                .setInclude(tables)  // 生成的表
                .setEntityLombokModel(true);//支持Lombok

        //4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent(parentPackage)//顶级包结构
                .setMapper(mapper)    //数据访问层
                .setService(service)   //业务逻辑层
                .setController(controller) //控制器
                .setEntity(entity) //实体类
                .setXml(mapperxml);    //mapper映射文件

        //5. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setPackageInfo(pkConfig)
                .setTemplateEngine(new FreemarkerTemplateEngine()); // 使用Freemarker引擎模板
        //6. 执行
        ag.execute();
    }
}

运行

可以看见我们所需的代码已经生成,将文件拷贝到项目中即可

特别注意

  • 将实体类中属性数据类型为LocalDateLocalDateTime修改成java.util.Date类型
相关推荐
海边的Kurisu2 小时前
苍穹外卖日记 | Day1 苍穹外卖概述、开发环境搭建、接口文档
java
uzong5 小时前
后端线上发布计划模板
后端
C雨后彩虹6 小时前
任务最优调度
java·数据结构·算法·华为·面试
uzong6 小时前
软件工程师应该关注的几种 UML 图
后端
heartbeat..6 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
Jing_jing_X6 小时前
AI分析不同阶层思维 二:Spring 的事务在什么情况下会失效?
java·spring·架构·提升·薪资
上进小菜猪7 小时前
基于 YOLOv8 的 100 类中药材智能识别实战 [目标检测完整源码]
后端
元Y亨H8 小时前
Nacos - 服务发现
java·微服务
微露清风8 小时前
系统性学习C++-第十八讲-封装红黑树实现myset与mymap
java·c++·学习
dasi02278 小时前
Java趣闻
java