代碼一鍵生成


源碼地址:https://github.com/nongzihong/automatic

MyBatis-Plus 官網:https://mp.baomidou.com/

起源:

dao,entity,service,controller都要自己去編寫。而這部分代碼,都是有一定的規范,有需求,就有對應的產品應運而生,AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,極大的提升了開發效率。

環境

springboot 2.2.1.RELEASE
mybatis-plus 3.3.0
spring-boot-starter-swagger 1.5.1.RELEASE

 

 

項目結構圖

 

 

 

 

 

sql腳本

create database pro;
use pro;


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(111) NOT NULL AUTO_INCREMENT COMMENT '編號',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '社長', 18);
INSERT INTO `student` VALUES (2, '老王', 20);
INSERT INTO `student` VALUES (3, '蘭陵王', 11);

 

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 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.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>automatic</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>automatic</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--web依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--junit測試-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>


        <!--代碼生成模式插件  3.0.3以后需要手動設置依賴-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>


        <!--簡化代碼插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--代碼生成模板-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>


        <!-- druid阿里巴巴數據庫連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>

        <!-- 熱部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <!--swagger2-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-swagger</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.3.0</version>
        </dependency>



    </dependencies>

    <build>

        <!--打包后的項目名-->
        <finalName>codeauto</finalName>
        <!--解決mapper文件不到class文件夾的問題-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src\main\java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>



        <plugins>


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


            <!-- 1、設置jar的入口類 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.example.automatic.AutoApplication</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>





            <!-- 3、打包過程忽略Junit測試 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

application.yml

server:
  port: 8888

spring:
  datasource:
    # 配置數據源
    driver-class-name: org.mariadb.jdbc.Driver
    # 使用druid連接池
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mariadb://127.0.0.1:3306/pro
    username: root
    password: 123

###增加日志輸出,方便定位問題
logging:
  level:
    root : warn
    com.cxyxs.mybatisplus.dao: trace
  ###控制台輸出格式
  pattern:
    console: '%p%m%n'

mybatis-plus:
  mapper-locations: classpath*:/com/example/automatic/mapper/xml/*.xml
  global-config:
    db-config:
      ###邏輯未刪除的值
      logic-not-delete-value: 0
      ###邏輯已刪除的值
      logic-delete-value: 1


  ####掃描swagger注解
  swagger:
    base-package: com.example
  • 配置數據庫的信息,以自己的配置為主
  • mapper-locations 是根據自動生成代碼的規則而定義的
  • swagger 配置swagger注解,掃描范圍

 

啟動類

package com.example.automatic;

import com.spring4all.swagger.EnableSwagger2Doc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@MapperScan("com.example.automatic.mapper")
@SpringBootApplication
@EnableSwagger2Doc
public class AutomaticApplication {

    public static void main(String[] args) {
        SpringApplication.run(AutomaticApplication.class, args);
    }

}
  • @MapperScan配置掃描dao包的位置(以我們常用的思維),社長習慣以mapper命名
  • @EnableSwagger2Doc 啟用swagger注解

 

 

代碼自動生成

package com.example.automatic;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
class CodeGenerationTests {


    public static void main(String[] args) {

        //代碼生成器

        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        //當前路徑
        String projectPath = System.getProperty("user.dir");
        //輸出路徑
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("ZH");    //設置作者
        //生成代碼后,是否打開文件夾
        gc.setOpen(false);
        gc.setFileOverride(false);  //是否覆蓋原來代碼,個人建議設置為false,別覆蓋,危險系數太高
        gc.setServiceName("%sService");   //去掉service的I前綴,一般只需要設置service就行


        gc.setDateType(DateType.ONLY_DATE);   //日期格式
        gc.setSwagger2(true);       // 實體屬性 Swagger2 注解,實體類上會增加注釋
        mpg.setGlobalConfig(gc);

        // 數據源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mariadb://127.0.0.1:3306/pro");
        // dsc.setSchemaName("public");
        dsc.setDriverName("org.mariadb.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123");
        dsc.setDbType(DbType.MYSQL);    //指定數據庫的類型
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.automatic");   //自定義包的路徑
        //pc.setModuleName("module");   //模塊名稱  設置后,會生成com.example.automatic,里面存放之前設置的mapper,entity
        pc.setEntity("entity");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setController("controller");
        mpg.setPackageInfo(pc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("student");    //設置映射的表名,可以設置多個表

        //表前綴設置  cxyxs_student
        //strategy.setTablePrefix(new String[]{"cxyxs_"});
        //包的命名規則,使用駝峰規則
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //列的名稱,使用駝峰規則
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否使用lombok
        strategy.setEntityLombokModel(true);
        //駝峰命名
        strategy.setRestControllerStyle(true);
        strategy.setLogicDeleteFieldName("is_delete");   //邏輯刪除,假刪除會用到

        //自動填充字段,在項目開發過程中,例如創建時間,修改時間,每次,都需要我們來指定,太麻煩了,設置為自動填充規則,就不需要我們賦值咯
        TableFill fillInsert = new TableFill("create_time", FieldFill.INSERT);
        TableFill fillUpdate= new TableFill("update_time", FieldFill.UPDATE);
        List fillLists = new ArrayList();
        fillLists.add(fillInsert);
        fillLists.add(fillUpdate);
        strategy.setTableFillList(fillLists);
        //樂觀鎖
        //strategy.setVersionFieldName("version");
        mpg.setStrategy(strategy);

        mpg.execute();  //執行


    }

}

 

 

 

 

 

 

 

contoller,entity,mapper,service代碼都給我們生成好

 

 

 

  • swagger注釋都給我們生成好咯,而且代碼也很規范,讓我們自己來寫,可能會遇到很多很低級的錯誤。
  • 雖說,代碼自動生成很智能,智能的前提,是有規范的,數據庫命令,最高遵守相關的規范,這里就不過多闡述咯

 

 

 

controller類

package com.example.automatic.controller;


import com.example.automatic.entity.Student;
import com.example.automatic.mapper.StudentMapper;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author ZH
 * @since 2020-04-08
 */
@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentMapper studentMapper;


    @GetMapping("/test")
    @ApiOperation(value = "測試接口", notes = "測試")
    public List<Student> getStudent1(Student stu) {
        List<Student> lists = studentMapper.selectList(null);
        studentMapper.selectByMap();
        return lists;
    }

    @GetMapping("/count")
    @ApiOperation(value = "統計數量", notes = "測試")
    public int getCount(){
        return studentMapper.count();
    }

}

StudentController這個類,是自動生成的,增加兩個個方法,來看看效果。

 

測試

http://localhost:8888/swagger-ui.html

 

 

 

 通過頁面可以發現有一個basic-error-controller,實際上,我們代碼里面沒有定義這個,有強迫症的,可以百度解決方法,配置一下,這里就不配置了

 

 

 

 

 通過可視化界面,前端可以看到返回的參數注釋

 

 

 

 

傳參也有注釋

 

點擊try it out按鈕  可以看到有返回數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM