1. 程式人生 > >Spring boot+Mybatis plus整合+Mybatis plus逆向工程

Spring boot+Mybatis plus整合+Mybatis plus逆向工程

環境引數

jdk 1.8
資料庫 Mysql5.5+
IDE IDEA2018.2
Maven 3.3.9
Spring boot 2.1.0.RELEASE
Mybatis plus 3.0.5

1.建立Spring Initializr專案
在這裡插入圖片描述
2.新增進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>

    <groupId>com.lj</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.4</version>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- velocity 模板引擎, 預設 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>
		<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.0.5</version>
        </dependency>
		<!-- freemarker 模板引擎 -->
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

3.Mybatis plus程式碼生成器
建立MysqlGenerator類

package com.lj.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 演示例子,執行 main 方法控制檯輸入模組表名回車自動生成對應專案目錄中
public class MysqlGenerator {

    /**
     * <p>
     * 讀取控制檯內容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("請輸入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請輸入正確的" + tip + "!");
    }

    public static void main(String[] args) {
        // 程式碼生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全域性配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        //outputDir:生成檔案的輸出目錄,預設值:D 盤根目錄
        gc.setOutputDir(projectPath + "/src/main/java");
        //IdType設定主鍵生成策略,預設值null
        gc.setIdType(IdType.UUID);
        //Author設定作者
        gc.setAuthor("LuJ");
        //Open:是否開啟輸出目錄
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);

        // 資料來源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/student?serverTimezone=UTC&amp&characterEncoding=utf-8&useSSL=false");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("1234");
        //設定資料庫型別,預設MYSQL
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模組名"));
        //父包名。如果為空,將下面子包名必須寫全部, 否則就只需寫子包名
        pc.setParent("com.lj");
        mpg.setPackageInfo(pc);

        //模板配置


        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸入檔名稱
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));


        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        //設定命名格式
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //【實體】是否為lombok模型(預設 false)
        strategy.setEntityLombokModel(false);
        //生成 @RestController 控制器
        strategy.setRestControllerStyle(true);
        strategy.setInclude(scanner("表名"));
        //駝峰轉連字元
        strategy.setControllerMappingHyphenStyle(true);
        //表名字首
        strategy.setTablePrefix(pc.getModuleName() + "_");
        //是否生成實體時,生成欄位註解
        strategy.entityTableFieldAnnotationEnable(true);
        //設定自定義繼承的Entity類全稱,帶包名
//       strategy.setSuperEntityClass("com.lj.common.BaseEntit");
        //設定自定義繼承的Controller類全稱,帶包名
//        strategy.setSuperControllerClass("com.lj.common.BaseController");
        //設定自定義基礎的Entity類,公共欄位
//        strategy.setSuperEntityColumns("id");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

4.application.yml配置資訊

# DataSource Config
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/student?serverTimezone=UTC&amp&characterEncoding=utf-8&useSSL=false
    username: root
    password: 1234

#mybatis-plus:
#    mapper-locations: classpath:mapper/*.xml
#    typeAliasesPackage: com.lj.demo.entity
#    configuration:
#      map-underscore-to-camel-case: true  #使用駝峰法對映屬性
#    global-config:
#      #主鍵型別  0:"資料庫ID自增", 1:"使用者輸入ID",2:"全域性唯一ID (數字型別唯一ID)", 3:"全域性唯一ID UUID";
#      id-type: 0
#      #欄位策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
#      field-strategy: 2
#      #駝峰下劃線轉換
#      db-column-underline: true
#      #重新整理mapper 除錯神器
#      refresh-mapper: true
#      #資料庫大寫下劃線轉換
#      #capital-mode: true
#      #序列介面實現類配置
#      #key-generator: com.baomidou.springboot.xxx
#      #邏輯刪除配置
#      #logic-delete-value: 0
#      #logic-not-delete-value: 1
#      #自定義填充策略介面實現
#      #meta-object-handler: com.baomidou.springboot.xxx
#      #自定義SQL注入器
#      #sql-injector: com.baomidou.springboot.xxx


5.執行MysqlGenerator
執行後自動生成對應Entity、Mapper、Mapper XML、Service、Controller 等各個模組的程式碼,以下是路徑圖
路徑圖

7.測試類DemoApplicationTest

package com.lj.demo;

import com.lj.demo.entity.Stu;
import com.lj.demo.mapper.StuMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
@MapperScan("com.lj.demo.mapper")
public class DemoApplicationTests {

    @Autowired
    StuMapper stuMapper;

    @Test
    public void contextLoads() {
        List<Stu> stuList = new ArrayList<>();
        Stu stu = new Stu("join","2",40,"18855544444");
        stuMapper.insert(stu);
//        stuList.forEach(System.out::println);
//        Assert.assertEquals(0, stuList.size());
    }

}

測試結果:
測試結果