Mybatis-lus 代码生成器 及小部分优化

Mybatis-Plus代码生成器的使用,首先要进行添加依赖操作(又称导包),按照官网推荐和项目要求进行导包

官网链接:https://mp.baomidou.com/guide/

1、添加代码生成器依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>

2、根据需要添加模板引擎依赖,具体引擎实例官网上都有,本文以 Freemarker模板引擎为例

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>latest-freemarker-version</version>
</dependency>

 3、开始编写代码生成器类

创建一个类,来放置自动生成器代码,一般可创建在测试文件夹中(test)

将代码生成器代码放置在一个main()方法中,可直接运行

①创建一个代码生成器对象

AutoGenerator mpg = new AutoGenerator();

②进行全局配置 

// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");    //获取当前项目的目录
gc.setOutputDir(projectPath + "/src/main/java");        //设置代码生成路径
gc.setAuthor("jobob");             //设置代码作者
mpg.setGlobalConfig(gc);           //将全局配置放到代码生成器的对象中

③进行数据源配置

mybatis-plus代码生成器强大的功能之一在于,它不用你事先创建好和数据库中表对应的对象,代码生成器可通过读取数据库表与列名直接生成对应的对象

// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("密码");
mpg.setDataSource(dsc);

该配置用来直接生成pojo文件中的与数据库表相对应的对象。

④ 进行包配置(在这里以我个人的项目为例)

 // 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.jp");
pc.setEntity("pojo");
pc.setController("controller");
pc.setMapper("mapper");
pc.setService("service");
pc.setServiceImpl("service.impl");

⑤包配置后 ,由于官网上的代码是将包配置直接放到代码生成器对象中,下面进行自定义输出配置,过程个人感觉较为繁琐,此处有一个简单的方法。仅供大家参考

代码生成器执行的入口是执行生成,即        mpg.excupt()

当进去看源码的时候会发现(由于是开源的源码,大家可在java编写代码的工具中进行查看)

public void execute() {
    logger.debug("==========================准备生成文件...==========================");
    if (null == this.config) {
        this.config = new ConfigBuilder(this.packageInfo, this.dataSource, this.strategy, this.template, this.globalConfig);
        if (null != this.injectionConfig) {
            this.injectionConfig.setConfig(this.config);
        }
    }

ConfigBuilder对象中传了一个packageInfo的属性,于是再往深层次的去查看,会发现在handlerPackage类中有这样一段代码

this.setPathInfo(this.pathInfo, template.getEntity(this.getGlobalConfig().isKotlin()), outputDir, "entity_path", "Entity");
this.setPathInfo(this.pathInfo, template.getMapper(), outputDir, "mapper_path", "Mapper");
this.setPathInfo(this.pathInfo, template.getXml(), outputDir, "xml_path", "Xml");
this.setPathInfo(this.pathInfo, template.getService(), outputDir, "service_path", "Service");
this.setPathInfo(this.pathInfo, template.getServiceImpl(), outputDir, "service_impl_path", "ServiceImpl");
this.setPathInfo(this.pathInfo, template.getController(), outputDir, "controller_path", "Controller");

是用来设置代码生成的路径,所以我们可以用该方式进行对代码生成路径的设置(以我个人代码为例)

此处个人感觉是比较好用的地方,大家可以根据自己的实际情况考虑是否使用

//自定义生成路径
Map<String,String> map = new HashMap<>();
map.put("entity_path",config + "/src/main/java/com/jp/pojo");
map.put("mapper_path",config + "/src/main/java/com/jp/mapper");
map.put("xml_path",config + "/src/main/resources/com/jp/mapper");
map.put("service_path",config + "/src/main/java/com/jp/service");
map.put("service_impl_path",config + "/src/main/java/com/jp/service/impl");
map.put("controller_path",config + "/src/main/java/com/jp/controller");
pc.setPathInfo(map);    //将生成路径放进map
mpg.setPackageInfo(pc);   

⑥策略配置

// 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 公共父类
        strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
        // 写于父类中的公共字段
        strategy.setSuperEntityColumns("id");
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());

⑦执行生成

mpg.execute();

在我个人写代码中遇到的问题:

导包错误导致的

Mybatis-lus 代码生成器 及小部分优化

 这里突然报错,是由于上面导包倒错的原因

 GlobalConfig包倒错导致的Mybatis-lus 代码生成器 及小部分优化

应该导的是 

Mybatis-lus 代码生成器 及小部分优化

 generator下的GlobalConfig

                                                                        声明:本文为自己参考官网编写,如有侵权联系删帖

上一篇:C语言和设计模式-策略模式


下一篇:# Mybatis-plus<一> MybatisPlus代码自动生成器