Bootstrap

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 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.配置数据库连接信息
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

<!--代码生成-->
<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>

编写核心模板

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类型
;