MybatisPlus代码生成器
这里讲解的是新版 (mybatis-plus 3.5.1+版本),旧版不兼容
官方文档:https://baomidou.com/(建议多看看官方文档,每种功能里面都有讲解)
配置
这里的配置表格和官方文档一致
数据源配置(DataSource)
属性 | 说明 | 示例 |
---|---|---|
url | jdbc路径 | jdbc:mysql://127.0.0.1:3306/mybatis-plus |
username | 数据库账号 | root |
password | 数据库密码 | 123456 |
dbQuery(IDbQuery) | 数据库查询 | new MySqlQuery() |
schema(String) | 数据库schema(部分数据库适用) | mybatis-plus |
typeConvert(ITypeConvert) | 数据库类型转换器 | new MySqlTypeConvert() |
keyWordsHandler(IKeyWordsHandler) | 数据库关键字处理器 | new MySqlKeyWordsHandler() |
全局配置(GlobalConfig)
方法 | 说明 | 示例 |
---|---|---|
fileOverride | 覆盖已生成文件 | 默认值:false |
disableOpenDir | 禁止打开输出目录 | 默认值:true |
outputDir(String) | 指定输出目录 | /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp |
author(String) | 作者名 | baomidou 默认值:作者 |
enableKotlin | 开启 kotlin 模式 | 默认值:false |
enableSwagger | 开启 swagger 模式 | 默认值:false |
dateType(DateType) | 时间策略 | DateType.ONLY_DATE=Date 默认值: DateType.TIME_PACK=LocalDateTime |
commentDate(String) | 注释日期 | 默认值: yyyy-MM-dd |
包配置(PackageConfig)
方法 | 说明 | 示例 |
---|---|---|
parent(String) | 父包名 | 默认值:com.baomidou |
moduleName(String) | 父包模块名 | 默认值:无 |
entity(String) | Entity 包名 | 默认值:entity |
service(String) | Service 包名 | 默认值:service |
serviceImpl(String) | Service Impl 包名 | 默认值:service.impl |
mapper(String) | Mapper 包名 | 默认值:mapper |
mapperXml(String) | Mapper XML 包名 | 默认值:mapper.xml |
controller(String) | Controller 包名 | 默认值:controller |
other(String) | 自定义文件包名 | 输出自定义文件时所用到的包名 |
pathInfo(Map<OutputFile, String>) | 路径配置信息 | Collections.singletonMap(OutputFile.mapperXml, \"D://\") |
策略配置(StrategyConfig)
方法 | 说明 | 示例 |
---|---|---|
enableCapitalMode | 开启大写命名 | 默认值:false |
enableSkipView | 开启跳过视图 | 默认值:false |
disableSqlFilter | 禁用 sql 过滤 | 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关 |
enableSchema | 启用 schema | 默认值:false,多 schema 场景的时候打开 |
likeTable(LikeTable) | 模糊表匹配(sql 过滤) | likeTable 与 notLikeTable 只能配置一项 |
notLikeTable(LikeTable) | 模糊表排除(sql 过滤) | likeTable 与 notLikeTable 只能配置一项 |
addInclude(String...) | 增加表匹配(内存过滤) | include 与 exclude 只能配置一项 |
addExclude(String...) | 增加表排除匹配(内存过滤) | include 与 exclude 只能配置一项 |
addTablePrefix(String...) | 增加过滤表前缀 | |
addTableSuffix(String...) | 增加过滤表后缀 | |
addFieldPrefix(String...) | 增加过滤字段前缀 | |
addFieldSuffix(String...) | 增加过滤字段后缀 | |
entityBuilder | 实体策略配置 | |
controllerBuilder | controller 策略配置 | |
mapperBuilder | mapper 策略配置 | |
serviceBuilder | service 策略配置 |
模板引擎配置(TemplateEngine)
默认 Velocity ;可选模板引擎 Beetl 或 Freemarker。(二选一即可)
模板引擎 | 代码 | |
---|---|---|
Velocity | 默认 | .templateEngine(new VelocityTemplateEngine()) |
Freemarker | 可选 | .templateEngine(new FreemarkerTemplateEngine()) |
Beetl | 可选 | .templateEngine(new BeetlTemplateEngine()) |
手动配置代码生成器
-
建表,插入数据
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT \'主键ID\', name VARCHAR(30) NULL DEFAULT NULL COMMENT \'姓名\', age INT(11) NULL DEFAULT NULL COMMENT \'年龄\', email VARCHAR(50) NULL DEFAULT NULL COMMENT \'邮箱\', version INT(10) NOT NULL DEFAULT 1 COMMIT \'乐观锁版本号\', DELETED INT(10) NOT NULL DEFAULT 0 COMMIT \'逻辑删除\', CREATE_TIME DATE COMMIT \'创建时间\', modify_time DATE COMMIT \'更新时间\', PRIMARY KEY (id) ); DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (1, \'工藤新一\',\'test1@baomidou.com\'), (2, \'毛利兰\',\'est2@baomidou.com\'), (3, \'柯南\', 28, \'test3@baomidou.com\'), (4, \'灰原哀\', 21, \'test4@baomidou.com\'), (5, \'工藤有希子\', 24, \'test5@baomidou.com\');
-
导入依赖
<dependencies> <!--spring-boot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SpringBootTest--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--swagger--> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.6.3</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--mysql 驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <!--mybatis-plus-generator 生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.2</version> </dependency> <!--velocity--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency> <!--以下两个引擎模板保留一个即可,看个人爱好选择--> <!--freemarker引擎模板--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> <!--beetl引擎模板--> <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl</artifactId> <version>3.8.1.RELEASE</version> </dependency> </dependencies>
-
yaml
#设置开发环境 spring: datasource: username: root password: 123456 driver-class-name: com.p6spy.engine.spy.P6SpyDriver url: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 mybatis-plus: #配置日志 log-impl:日志实现 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
-
在测试类里写入主方法并修改参数,运行即可【配置已经封装好了】
public static void main(String[] args) { //这里按着给的注解修改参数即可 //手动配置数据源 String url=\"jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8\"; //注意修改数据库名 String name=\"root\"; String password=\"123456\"; //数据库表的设置 List<String> listTable = Arrays.asList(\"user\"); //设置需要自动代码生成的表名 List<String> listTableSuffix = Arrays.asList(\"_b\"); //设置 过滤 表的后缀 List<String> listTablePrefix = Arrays.asList(\"t_\",\"c_\"); //设置 过 //基本信息 String author = \"柯南\"; //作者 String parent = \"com\"; //父包名 String module = \"example\"; //模块包名 //已封装好,无需更改。可按照需求进行注释 //1、配置数据源 FastAutoGenerator.create(url, name, password) //2、全局配置 .globalConfig(builder -> { builder.author(author) // 设置作者名 .outputDir(System.getProperty(\"user.dir\") + \"/src/main/java\") //设置输出路径:项目的 java 目录下【System.getProperty(\"user.dir\")意思是获取到项目所在的绝对路径】 .commentDate(\"yyyy-MM-dd hh:mm:ss\") //注释日期 .dateType(DateType.ONLY_DATE) //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date; .fileOverride() //覆盖之前的文件 .enableSwagger() //开启 swagger 模式 .disableOpenDir(); //禁止打开输出目录,默认打开 }) //3、包配置 .packageConfig(builder -> { builder.parent(parent) // 设置父包名 .moduleName(module) //设置模块包名 .entity(\"entity\") //pojo 实体类包名 .service(\"service\") //Service 包名 .serviceImpl(\"service.impl\") // ***ServiceImpl 包名 .mapper(\"mapper\") //Mapper 包名 .xml(\"mapper.xml\") //Mapper XML 包名 .controller(\"controller\") //Controller 包名 .other(\"config\") //自定义包名(一般不在这里生成,而是后面编写的时候自己建包) .pathInfo(Collections.singletonMap(OutputFile.mapper.xml, System.getProperty(\"user.dir\")+\"/src/main/resources/mapper\")); //配置 mapper.xml 路径信息:项目的 resources 目录下 }) //4、策略配置 .strategyConfig(builder -> { builder .enableCapitalMode() //开启大写命名 .enableSkipView() //创建实体类的时候跳过视图 .addInclude(listTable) // 设置需要生成的数据表名 .addTableSuffix(listTableSuffix) //设置 过滤 表的后缀 .addTablePrefix(listTablePrefix) // 设置 过滤 表的前缀 //4.1、实体类策略配置 .entityBuilder() .enableChainModel() //开启链式模型 //.disableSerialVersionUID() //默认是开启实体类序列化,可以手动disable使它不序列化。由于项目中需要使用序列化就按照默认开启了 .enableTableFieldAnnotation() // 开启生成实体时生成字段注解 .enableLombok() //开启 Lombok .versionColumnName(\"version\") //乐观锁字段名(数据库) .versionPropertyName(\"version\") //乐观锁属性名(实体) .logicDeleteColumnName(\"deleted\") //逻辑删除字段名(数据库) .logicDeletePropertyName(\"deleteFlag\") //逻辑删除属性名(实体) .naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略:默认是下划线转驼峰命。这里可以不设置 .columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略:下划线转驼峰命。(默认是和naming一致,所以也可以不设置) .addTableFills( new Column(\"create_time\", FieldFill.INSERT), new Column(\"modify_time\", FieldFill.INSERT_UPDATE) ) //添加表字段填充,\"create_time\"字段自动填充为插入时间,\"modify_time\"字段自动填充为插入修改时间 .idType(IdType.AUTO) //设置主键自增 //4.2、Controller策略配置 .controllerBuilder() .enableHyphenStyle() //开启驼峰连转字符 .formatFileName(\"%sController\") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController .enableRestStyle() //开启生成 @RestController 控制器 //4.3、service 策略配置 .serviceBuilder() .formatServiceFileName(\"%sService\") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService .formatServiceImplFileName(\"%sServiceImpl\") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl //4.4、Mapper策略配置 .mapperBuilder() .superClass(BaseMapper.class) //设置父类 .enableBaseResultMap() //启用 BaseResultMap 生成 .enableBaseColumnList() //启用 BaseColumnList .formatMapperFileName(\"%sMapper\") //格式化 mapper 文件名称 .enableMapperAnnotation() //开启 @Mapper 注解 .formatXmlFileName(\"%sXml\") //格式化Xml文件名称 .formatMapperFileName(\"%sMapper\"); //格式化Mapper文件名称 }) //5、模板 .templateEngine(new VelocityTemplateEngine()) /* 模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker(以下两个引擎用哪个就保留哪个) .templateEngine(new BeetlTemplateEngine()) .templateEngine(new FreemarkerTemplateEngine()) */ .templateEngine(new FreemarkerTemplateEngine()) //本人选择了Freemarker //6、执行 .execute(); }
-
运行结果:
生成的包:
注意:代码生成器生成的实体类是用@Setter和@Getter ,没有toString方法和有参、无参构造,所以代码生成后需要手动在实体类上删除@Setter和@Getter ,添加@Data @NoArgsConstructor @AllArgsConstructor
来源:https://www.cnblogs.com/buchizicai/p/16606917.html
本站部分图文来源于网络,如有侵权请联系删除。