二、springboot整合Mybatis Plus

1. 添加依赖

    <!-- freemarker模板 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</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>3.5.3</version>
    </dependency>
    <!-- Mybatis Plus 代码生成器依赖 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>3.5.3</version>
    </dependency>

    <!-- lombok简化代码的工具 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

完整pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!-- 引入spring boot 统一版本父项目管理依赖 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.9.RELEASE</version>
    <relativePath/>
  </parent>

  <groupId>com.lv</groupId>
  <artifactId>autonomy</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>autonomy</name>
  <description>Demo project for Spring Boot</description>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- 项目的热加载重启插件 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
    <!-- freemarker模板 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</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>3.5.3</version>
    </dependency>
    <!-- Mybatis Plus 代码生成器依赖 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>3.5.3</version>
    </dependency>

    <!-- lombok简化代码的工具 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>

2. 数据库和mybatis-plus配置

resources文件夹下新增 application.yml

spring:
  # 数据源配置
  datasource:
    username: username
    password: password
    url: jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.cj.jdbc.Driver

# mybatis-plus配置
mybatis-plus:
  # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML文件位置)
  mapperLocations: classpath:mapper/*.xml
  configuration:
    # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
    map-underscore-to-camel-case: true
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3. MybatisPlus配置

新建MybatisPlusConfig.java,MybatisPlus分页插件设置

package com.lv.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * MybatisPlus配置
 * @return
 */
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = {"com.lv.**.mapper"})
public class MybatisPlusConfig {

  /**
   * 分页插件
   * @return
   */
  @Bean
  public MybatisPlusInterceptor mpInterceptor(){
    // 1. 定义Mp拦截器
    MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
    // 2. 添加具体的拦截器
    mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    return mpInterceptor;
  }
}

新建MyMetaObjectHandler.java,MybatisPlus自动填充设置

package com.lv.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * Mybatis plus自动填充
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
  @Override
  public void insertFill(MetaObject metaObject) {
    this.strictInsertFill(metaObject, "version", Integer.class, 0);
    this.strictInsertFill(metaObject, "deleted", Boolean.class, false);
    this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
    this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    //更新数据时,直接更新字段
    this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
    this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
  }
}

4. MybatisPlus代码自动生成

新增CodeGenerator.java

package com.lv;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * 自动代码生成
 */
public class CodeGenerator {
  private static final String datasourceUrl="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
  private static final String datasourceUsername="username";
  private static final String datasourcePassword="password";
  private static final String projectPath = System.getProperty("user.dir"); // 项目路径

  public static  void main(String[] args) {

    // https://baomidou.com/pages/981406 配置文档地址
    // 代码生成器
    FastAutoGenerator.create(datasourceUrl, datasourceUsername, datasourcePassword)
        .globalConfig(initGlobalConfig()) // 全局配置
        .packageConfig(initPackageConfig()) // 包配置
        .strategyConfig(initStrategyConfig()) // 策略配置
        .templateEngine(new FreemarkerTemplateEngine()) // 模板引擎配置 使用Freemarker引擎模板,默认的是Velocity引擎模板
        .execute();
  }

  // 处理 all 情况
  protected static List<String> getTables(String tables) {
    return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
  }

  private static Consumer<GlobalConfig.Builder> initGlobalConfig() {
    return builder -> {
      builder.outputDir(projectPath + "/src/main/java") // 指定输出目录
          .author("lxd")
          .enableSwagger() // 开启swagger
          .dateType(DateType.TIME_PACK) // 时间策略
          .commentDate("yyyy-MM-dd") // 注释日期
          .disableOpenDir(); // 禁止打开输出目录
    };
  }

  private static Consumer<PackageConfig.Builder> initPackageConfig() {
    return builder -> {
      builder.parent("com.lv") // 父包名
          .entity("entity")
          .service("service")
          .serviceImpl("service.impl")
          .controller("controller")
          .mapper("mapper")
          .xml("mapper")
          .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mapper/")); // 设置mapperXml生成路径
    };
  }

  private static BiConsumer<Function<String, String>, StrategyConfig.Builder> initStrategyConfig() {
    return (scanner, builder) -> {
      builder.enableSkipView() // 开启跳过视图
          .addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔。所有输入 all")))
          //.addTablePrefix("t_") // 增加过滤表前缀
          /* Entity 策略配置 */
          .entityBuilder()
          .enableFileOverride() // 覆盖已生成文件
          .naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略 下划线转驼峰命名
          .columnNaming(NamingStrategy.underline_to_camel) // 数据库表字段映射到实体的命名策略
          .enableLombok() // 开启lombok模型
          .versionColumnName("version") // 乐观锁字段名(数据库字段)
          .logicDeleteColumnName("deleted") // 逻辑删除字段名(数据库字段)
          .addTableFills(new Column("create_time", FieldFill.INSERT)) // 添加表字段填充
          .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
          .enableChainModel()
          /* Controller 策略配置 */
          .controllerBuilder()
          .enableFileOverride() // 覆盖已生成文件
          .formatFileName("%sController") // 格式化文件名称
          .enableRestStyle() // 开启生成@RestController 控制器
          .enableHyphenStyle() // 开启驼峰转连字符
          /* Service 策略配置 */
          .serviceBuilder()
          .enableFileOverride() // 覆盖已生成文件
          .formatServiceFileName("%sService") // 格式化 service 接口文件名称
          .formatServiceImplFileName("%sServiceImpl") // 格式化 service 实现类文件名称
          /* Mapper 策略配置 */
          .mapperBuilder()
          .enableFileOverride() // 覆盖已生成文件
          .enableMapperAnnotation() // 开启 @Mapper 注解
          .formatMapperFileName("%sMapper") // 格式化 mapper 文件名称
          .formatXmlFileName("%sMapper"); // 格式化 xml 实现类文件名称
    };
  }
}

运行CodeGenerator,请输入表名,多个英文逗号分隔,所有输入 all。
生成controller、entity、mapper、service、serviceImpl、xxMapper.xml文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值