zoukankan      html  css  js  c++  java
  • 代码一键生成

    源码地址: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>srcmainjava</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按钮  可以看到有返回数据

  • 相关阅读:
    后端注册接口完善
    编写注册接口
    Git 多人开发及常见问题
    Git 常用命令
    GIT 的安装及配置SSH
    ORM查询方法(整理)
    HTTP的系列理解与整理
    Unity C# 反射
    C# 中的委托和事件
    Unity C# 运用 GetSaveFileName() 导出Excel文件
  • 原文地址:https://www.cnblogs.com/nongzihong/p/12661428.html
Copyright © 2011-2022 走看看