欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Mybatis-plus进阶之代码生成器

时间:2023-07-10
前言

Mybatis也有对应的反向工程mybatis-generator来生成相关的Mapper接口和xml配置。Mybatis-plus的代码生成更为简单。

导入pom依赖

com.baomidou mybatis-plus-generator 3.5.1 provided org.freemarker freemarker

加入freemarker的配置,我们的示例使用freemarker模板

SpringBoot配置文件中配置freemarker模板

spring.freemarker.suffix=.ftlspring.freemarker.template-loader-path=classpath*:templates/*.ftl

注:在我们依赖的mybatis-plus-generator包中就存在对应的模板文件,一般情况下我们无需从jar包中拷贝出来,除非你想自定义。

mybatis-plus-generator包中默认的模板文件如下: 编写测试代码

package com.yyoo.boot.mp;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.generator.FastAutoGenerator;import com.baomidou.mybatisplus.generator.config.OutputFile;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.Collections;@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = MPApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class Test2 { @Value("${my.hikari.jdbc-url}") private String url; @Value("${my.hikari.username}") private String username; @Value("${my.hikari.password}") private String password; @Test public void t1(){ FastAutoGenerator.create(url, username, password) .globalConfig(builder -> { builder.author("auto") // 设置作者 .enableSwagger() // 开启 swagger 模式 .disableOpenDir() // 禁用执行完成后打开文件夹 .fileOverride() // 覆盖已生成文件 .outputDir("C://work//tmp"); // 指定输出目录 }) .packageConfig(builder -> { builder.parent("com.yyoo.boot") // 设置父包名 .moduleName("mp") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "C://work//tmp//mapper")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { builder.addInclude("t_my_emp") .build() .entityBuilder() .enableLombok() // 使用lombok .idType(IdType.ASSIGN_ID) .convertFileName((String entityName) -> { if(entityName.startsWith("T")) { return entityName.substring(1); }else { return entityName; } }) .build() .mapperBuilder() .enablebaseResultMap() // 在mapper.xml文件中生成ResultMap .convertMapperFileName(entityName -> { String fileName; if(entityName.startsWith("T")) { fileName = entityName.substring(1); }else { fileName = entityName; } return fileName+"Mapper"; }) .convertXmlFileName(entityName -> { String fileName; if(entityName.startsWith("T")) { fileName = entityName.substring(1); }else { fileName = entityName; } return fileName+"Mapper"; }) .serviceBuilder() // 不能和formatFileName一起使用 .convertServiceFileName(entityName -> { String fileName; if(entityName.startsWith("T")) { fileName = entityName.substring(1); }else { fileName = entityName; } return fileName+"Service"; }) .convertServiceImplFileName(entityName -> { String fileName; if(entityName.startsWith("T")) { fileName = entityName.substring(1); }else { fileName = entityName; } return fileName+"ServiceImpl"; }) .controllerBuilder() .enableHyphenStyle() .enableRestStyle() // 不能和formatFileName一起使用 .convertFileName(entityName -> { String fileName; if(entityName.startsWith("T")) { fileName = entityName.substring(1); }else { fileName = entityName; } return fileName+"Controller"; }); }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 .execute(); }}

代码比较长,但都非常简单。只是有些地方需要注意

idType需要根据你的需要来设置convertFileName方法和formatFileName不要一起使用,如果一起使用,那么convertFileName方法将不会执行。只有formatFileName方法会生效。convertFileName方法接收一个ConverterFileName对象,示例中我们有很多类似的重复代码,大家可以将他们独立出来定义,减少代码量。示例中的各个方法配置的详细说明,请查看官网链接代码生成器的配置注:本文示例只支持3.5.1+版本,旧版本的代码情参考官网。

上一篇:Mybatis-plus进阶之分布式id生成
下一篇:待续

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。