Java 学习之路(1)- 使用 JPA 实现 CodeFirst, 使用 Mybatis-Plus 代码生成生成基本类

本贴最后更新于 1705 天前,其中的信息可能已经时移世改

前言

EF Core 有 Code First 的模式,省去了建表和修改表的过程,增加开发效率

每次都要自己创建 Mapper,Service,等等,有点麻烦,为什么增加开发效率,所以增加代码生成

预先利其事必先利其器 , 让我开始把

目标

使用 Spring-Data-JPA 自动修改生成表

使用 Mybatis-Plus 代码生成类库生成基本类

参考文章

https://mp.baomidou.com/guide/generator.html 代码生成

让我开始吧

pom.xml 引入 Spring-Data-Jpa

   <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

然后 applcation.yml 增加 jpa 的配置

spring:

  datasource:

    driver-class-name: com.mysql.jdbc.Driver

    url: jdbc:mysql://0.0.0.0:3306/klearn

    username: 1

    password: 1

  jpa:

    database: MySQL

    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

    show-sql: true

    hibernate:

      ddl-auto: update

增加 Entity

package estart.klearn.ambre.generator.domain;



import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableId;

import lombok.Data;

import org.hibernate.annotations.GenericGenerator;



import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Version;



@Data

@Entity

public class Role {



    /**

     * Id

     */

    @Id

    @GenericGenerator(name = "idGenerator", strategy = "uuid")

    @GeneratedValue(generator = "idGenerator")

    @TableId(type = IdType.UUID)

    private String id;





    /**

     * 创建时间

     */

    private String createTime;



    /**

     * 意向锁

     */

    @Version

    private Integer version;



    /**

     * 最后一次更改时间

     */

    private String lastChangeTime;



    /**

     * 角色名称

     */

    private String RoleName;



    /**

     * 角色备注

     */

    private  String Remark;

}


然后启动项目,表就会自动建好

###使用 Mybatis-Plus 生成类

增加 CodeGenerator 类

package estart.klearn.ambre.generator;



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;



public class CodeGenerator {

    /**

     * <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");

        gc.setOutputDir(projectPath + "/src/main/java");

        gc.setAuthor("ambre");

        gc.setOpen(false);

        // gc.setSwagger2(true); 实体属性 Swagger2 注解

        mpg.setGlobalConfig(gc);



        // 数据源配置

        DataSourceConfig dsc = new DataSourceConfig();

        dsc.setUrl("jdbc:mysql://0.0.0.0:3306/klearn");

        // dsc.setSchemaName("public");

        dsc.setDriverName("com.mysql.jdbc.Driver");

        dsc.setUsername("1");

        dsc.setPassword("1");

        mpg.setDataSource(dsc);



        // 包配置

        PackageConfig pc = new PackageConfig();

        pc.setModuleName(scanner("模块名"));

        pc.setParent("estart.klearn.ambre");

        mpg.setPackageInfo(pc);



        // 自定义配置

        InjectionConfig cfg = new InjectionConfig() {

            @Override

            public void initMap() {

                // to do nothing

            }

        };



        // 如果模板引擎是 freemarker

        String templatePath = "/templates/mapper.xml.ftl";

        // 如果模板引擎是 velocity

        // String templatePath = "/templates/mapper.xml.vm";



        // 自定义输出配置

        List<FileOutConfig> focList = new ArrayList<>();

        // 自定义配置会被优先输出

        focList.add(new FileOutConfig(templatePath) {

            @Override

            public String outputFile(TableInfo tableInfo) {

                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!

                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()

                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;

            }

        });

        /*

        cfg.setFileCreate(new IFileCreate() {

            @Override

            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {

                // 判断自定义文件夹是否需要创建

                checkDir("调用默认方法创建的目录");

                return false;

            }

        });

        */

        cfg.setFileOutConfigList(focList);

        mpg.setCfg(cfg);



        // 配置模板

        TemplateConfig templateConfig = new TemplateConfig();



        // 配置自定义输出模板

        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别

        // templateConfig.setEntity("templates/entity2.java");

        // templateConfig.setService();

        // templateConfig.setController();



        templateConfig.setXml(null);

        mpg.setTemplate(templateConfig);



        // 策略配置

        StrategyConfig strategy = new StrategyConfig();

        strategy.setNaming(NamingStrategy.underline_to_camel);

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);

        //strategy.setSuperEntityClass("estart.klearn.ambre.common.BaseEntity");

        strategy.setEntityLombokModel(true);

        strategy.setRestControllerStyle(true);

        // 公共父类

        //strategy.setSuperControllerClass("estart.klearn.ambre.common.BaseController");

        // 写于父类中的公共字段

        //strategy.setSuperEntityColumns("id");

        strategy.setInclude(scanner("表名,多个使用,号隔开").split(","));

        strategy.setControllerMappingHyphenStyle(true);

        strategy.setTablePrefix(pc.getModuleName() + "_");

        mpg.setStrategy(strategy);

        mpg.setTemplateEngine(new FreemarkerTemplateEngine());

        mpg.execute();

    }



}

然后启动,按步骤输入就行

结果:

  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 432 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...