| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package com.dk.mdm.generator;
- 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.*;
- 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 com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.util.ArrayList;
- /**
- * @desc : mybatis_plus逆向工程类
- * 引入的目的:
- * 1.解决每一个模块都要写的增删改查基础操作,
- * 像insert、deleteById、updateById、disableById、selectById这些通用功能以后不需要再手写xml了,
- * 2.表加列了,只需要在对应的entity中加属性,而也不需要我们再去维护操作单表的xml(关联查询还是要改的),
- * 3.避免出现一些大小写的低级错误,统一代码规范。
- * 4.让开发人员有更多的时间去转注于业务,避免重复无意义的工作。
- *
- * 但是mybatis_plus只针对于单表操作,引入其目的,是为了提升开发效率,它并不能代替开发人员去完成所有工作,
- * 比如关联分页条件查询、子查询、分组查询、多主键问题、和具体的业务还是需要我们去自行完成的。
- * 它的定位只是一个插件,不能作为一个完整的orm框架解决方案。没有完美的工具,择其善者而从之,其不善者而改之。
- * @author : 张潇木
- * @date : 2022-3-1 12:53
- */
- @SpringBootTest
- @RunWith(SpringRunner.class)//不加无法注入Mapper
- @Slf4j
- public class Generator {
- /**
- * @desc : 针对单表,自动生成增删改查sql、xml、mapper接口、service方法、controller接口
- * @author : 张潇木
- * @date : 2022-3-1 13:03
- */
- @Test
- public void generate(){
- //构建一个生成器对象
- AutoGenerator mpg = new AutoGenerator();
- //1、全局配置
- GlobalConfig gc = new GlobalConfig();
- String projectPath = System.getProperty("user.dir"); //获取当前目录
- gc.setOutputDir(projectPath+"/src/main/java"); //输出到哪个目录
- gc.setAuthor("姜永辉"); //作者
- gc.setOpen(false); //是否打开目录
- gc.setFileOverride(false); //是否覆盖
- gc.setServiceName("%sService"); //去Service的I前缀
- gc.setServiceImplName("%sService");
- gc.setIdType(IdType.AUTO); //主键策略
- gc.setBaseResultMap(true); //SQL 映射文件
- gc.setBaseColumnList(true); //SQL 片段
- gc.setDateType(DateType.ONLY_DATE); //时间类型
- gc.setSwagger2(true); //Swagger
- mpg.setGlobalConfig(gc);
- //2、设置数据源
- DataSourceConfig dsc = new DataSourceConfig();
- dsc.setUsername("dkic_b");
- dsc.setPassword("dk");
- dsc.setUrl("jdbc:postgresql://dkdev.dkiboss.com:15000/dkic_dev_b1");
- dsc.setSchemaName("dkic_b");
- dsc.setDriverName("org.postgresql.Driver");
- dsc.setDbType(DbType.POSTGRE_SQL);
- mpg.setDataSource(dsc);
- //3、包的配置
- PackageConfig pc = new PackageConfig();
- // pc.setModuleName("task"); //模块包名
- pc.setParent("com.dk.mdm"); //父包路径
- pc.setEntity("model.pojo.mst"); //实体层路径
- pc.setMapper("mapper.mst"); //mapper层路径
- pc.setXml("mapper.mst"); //xml层路径
- pc.setServiceImpl("service.mst"); //业务层路径
- pc.setController("controller.mst"); //控制层路径
- //app相关路径
- // pc.setEntity("model.app.pojo.pset"); //实体层路径
- // pc.setMapper("mapper.app.pset"); //mapper层路径
- // pc.setXml("mapper.app.pset"); //xml层路径
- // pc.setServiceImpl("service.app.pset"); //业务层路径
- // pc.setController("controller.app.pset"); //控制层路径
- mpg.setPackageInfo(pc);
- //4、策略配置
- StrategyConfig strategy = new StrategyConfig();
- strategy.setTablePrefix("t_mst"); //表名前缀
- strategy.setInclude("t_mst_setting_value"); //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
- // strategy.setInclude("t_mst_setting_value"); //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
- strategy.setNaming(NamingStrategy.underline_to_camel); //转驼峰
- strategy.setColumnNaming(NamingStrategy.underline_to_camel); //字段下划线转驼峰
- strategy.setEntityLombokModel(true); //是否使用lombok开启注解
- strategy.setSuperEntityClass("com.dk.common.pojo.PageInfo"); //实体基类
- strategy.setSuperControllerClass("com.dk.common.controller.BaseController"); //实体基类
- strategy.setSuperServiceImplClass("com.dk.common.service.BaseService"); //service基类
- strategy.setSuperMapperClass("com.dk.common.mapper.BaseMapper"); //mapper基类
- // strategy.setVersionFieldName("version"); //乐观锁配置
- strategy.setRestControllerStyle(true); //开启驼峰命名
- strategy.setControllerMappingHyphenStyle(true); //localhost:8080/hello_id_2
- // 逻辑删除标识,逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
- // 如果你需要再查出来就不应使用逻辑删除,而是以一个状态去表示。
- // 硬写:yml中logic-not-delete-value: 1 or value_flag=0
- // 如: 员工离职,账号被锁定等都应该是一个状态字段,此种场景不应使用逻辑删除。
- // 若确需查找删除数据,如老板需要查看历史所有数据的统计汇总信息,请单独手写sql。
- // strategy.setLogicDeleteFieldName("flg_del"); //逻辑删除字段,所有的查询都会自动带上value_flag=1这个条件。
- // 自动填充配置
- TableFill createTime = new TableFill("op_create_time", FieldFill.INSERT); //创建时间
- // TableFill updateTime = new TableFill("op_update_time", FieldFill.INSERT_UPDATE); //更新时间
- ArrayList<TableFill> tableFills = new ArrayList<>();
- tableFills.add(createTime);
- // tableFills.add(updateTime);
- strategy.setTableFillList(tableFills);
- mpg.setStrategy(strategy);
- //5、 自定义模板配置 放置自己项目的 src/main/resources/mp_templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
- TemplateConfig tc = new TemplateConfig();
- tc.setEntity("/mp_templates/entity.java");
- tc.setXml("/mp_templates/mapper.xml") // 设置生成xml的模板
- .setEntity("/mp_templates/entity.java") // 设置生成entity的模板
- .setMapper("/mp_templates/mapper.java") // 设置生成mapper的模板
- .setController("/mp_templates/controller.java") // 设置生成service的模板
- .setService(null) // 设置生成serviceImpl的模板
- .setServiceImpl("/mp_templates/serviceImpl.java"); // 设置生成controller的模板
- mpg.setTemplate(tc);
- mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 选择 freemarker引擎,注意 pom 依赖必须有!
- mpg.execute();//执行
- }
- }
|