MyBatis-plus第三章:自動生成entity、dao、service、controller四層程式碼

三井壽14發表於2020-12-18

本文主要記錄MyBatis-Plus的一個強大功能,自動生成entity、dao、service、controller四層程式碼,以及生成並關聯好mapper.xml檔案供我們手寫一些複雜的SQL(單表下的CRUD操作不需要手寫SQL了,框架內封裝了各種方法我們呼叫即可)。

一、建立SpringBoot專案並引入相關依賴

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

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </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-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
        <!--velocity 模板引擎,MyBatis-Plus 程式碼生成器需要-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>

二、編寫配置檔案 application.properties

# 服務埠
server.port=8888

# 設定當前為開發環境
spring.profiles.active=dev
# 配置資料庫連線
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/question_bank?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 配置日誌
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置邏輯刪除,邏輯刪除了的表中用1表示,沒刪除的0表示
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

三、建立程式碼生成器,並進行相關配置(可根據需求自行選擇配置)

寫在測試類中的main方法中即可,啟動main方法便能自動建立

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * Author:三井壽
 * 程式碼自動生成器
 * 自動生成entity、dao、service、controller 各層程式碼
 */
public class AutoCode {
    public static void main(String[] args) {
        //構建一個程式碼生成器物件
        AutoGenerator mpg = new AutoGenerator();

        //配置執行策略

        //1、全域性配置
        GlobalConfig gc = new GlobalConfig();
        String proPath = System.getProperty("user.dir"); //當前專案路徑
        gc.setOutputDir(proPath + "/src/main/java"); //設定程式碼生成路徑
        gc.setAuthor("科比門徒");
        gc.setOpen(false); //生成後是否開啟資料夾
        gc.setFileOverride(false); //是否覆蓋
        gc.setServiceName("%sService"); //去service的 I 字首
        gc.setIdType(IdType.ID_WORKER); //逐漸生成策略
        gc.setDateType(DateType.ONLY_DATE); //設定日期型別
        gc.setSwagger2(true); //是否生成Swagger
        mpg.setGlobalConfig(gc);

        //2、設定資料來源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/question_bank?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        //3、配置生成哪些包,這些包放在哪
        PackageConfig pc=new PackageConfig();
        pc.setModuleName("block"); //設定並生成該模組包
        pc.setParent("com.lg"); //設定模組存放位置
        pc.setEntity("entity"); //設定並生成存放實體類包
        pc.setMapper("mapper");//設定並生成存放mapper介面的包
        pc.setService("service"); //設定並生成service層所在的包
        pc.setController("controller"); //設定並生成controller層所在的包
        mpg.setPackageInfo(pc);

        //4、策略配置
        StrategyConfig strategy=new StrategyConfig();
        strategy.setInclude("user"); //設定要對映的表名!!!!
        strategy.setNaming(NamingStrategy.underline_to_camel); //表名中下劃線轉駝峰命名
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//表中欄位如果有下劃線,轉駝峰命名
        strategy.setEntityLombokModel(true);//自動生成Lombok
        strategy.setRestControllerStyle(true);//開啟 RestFul 風格
        strategy.setControllerMappingHyphenStyle(true);
        //設定邏輯刪除,對錶中的那個欄位
        strategy.setLogicDeleteFieldName("deleted");

        //自動填充 (表中如果有建立時間、修改時間話,可以使用自動填充)
        TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
        TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(createTime);
        tableFills.add(updateTime);
        strategy.setTableFillList(tableFills);
        //樂觀鎖配置
        strategy.setVersionFieldName("version");
        mpg.setStrategy(strategy);


        mpg.execute();//執行程式碼生成操作
    }
}

四 、編寫配置檔案配置樂觀鎖,分頁外掛、邏輯刪除、SQL效能分頁外掛(可以省略,但需要與上一步中的相關配置保持一致)

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * Author:三井壽
 */
@Configuration  //配置類
@EnableTransactionManagement  //自動管理事務註解
public class MybatisPlusConfig {
    /**
     * 配置樂觀鎖
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    /**
     * 配置分頁外掛
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }

    /**
     * 配置邏輯刪除
     * @return
     */
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }

    /**
     * 配置效能分析外掛
     * @return
     */
    @Bean
    @Profile({"dev","test"})  //設定 dev,test 環境開啟
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        //設定SQL最大可執行時間,超出這個時間說明SQL效能有問題,報超時異常
        performanceInterceptor.setMaxTime(1000); //ms
        //是否格式化SQL
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
}

五、執行main方法前的目錄結構及程式碼

在這裡插入圖片描述

六、執行main方法之後的目錄結構及程式碼

在這裡插入圖片描述

相關文章