您的位置:首页 > 汽车 > 新车 > 网站关键词代码_建设网站公司兴田德润在哪里_seo站长工具查询_今日国际新闻

网站关键词代码_建设网站公司兴田德润在哪里_seo站长工具查询_今日国际新闻

2025/2/24 22:11:39 来源:https://blog.csdn.net/Elaine2391/article/details/143976131  浏览:    关键词:网站关键词代码_建设网站公司兴田德润在哪里_seo站长工具查询_今日国际新闻
网站关键词代码_建设网站公司兴田德润在哪里_seo站长工具查询_今日国际新闻

目录

背景

动手开干

需要的依赖包,需要注意mybatis-plus-generator的3.5+版本是没有兼容历史版本的。

定义一个CodeGenerator类,负责生成代码和配置属性

Entity模版


背景

MybatisPlus代码生成使用默认的velocity模版解决不了定制化的需求,不同的开发规范也会出现细节化的差异,在这种情况下我们需要自定义velocity模版达到实现定制化的目的,自定义模板可以让你根据项目的具体要求调整生成代码的格式、结构和内容等。

动手开干

这里不建议学习velocity语法然后直接开始盲写模版,既然是模版,优先需要的肯定是模子。所以可以先写出一套简单的通用CURD,然后根据包、类、方法、对象进行模版编辑,最后通过调试验证就完成了。

MybatisPlus代码生成,官网地址:代码生成器 | MyBatis-Plus

  • 需要的依赖包,需要注意mybatis-plus-generator的3.5+版本是没有兼容历史版本的。
     <properties><java.version>17</java.version><mybatis-plus.version>3.5.3.1</mybatis-plus.version></properties>

    包依赖:

            <!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!-- MyBatis-Plus 代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId><version>${mybatis-plus.version}</version></dependency><!-- 模板引擎(Velocity)--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency>
  • 定义一个CodeGenerator类,负责生成代码和配置属性
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.generator.FastAutoGenerator;
    import com.baomidou.mybatisplus.generator.config.OutputFile;
    import com.baomidou.mybatisplus.generator.config.builder.CustomFile;
    import com.baomidou.mybatisplus.generator.config.rules.DateType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
    ​
    import java.util.*;
    ​
    /*** @Author: kule* @Date: 2024/11/19 17:05* @Version: 1.0**/
    public class CodeGenerator {public static void main(String[] args) {System.out.println(System.getProperty("user.dir"));generation("sys_role");}
    ​// module配置,多module需要指定对应private static String MODULE_NAME = "backend";// 数据库链接地址private static String URL = "jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";// 数据库用户名private static String USERNAME = "root";// 数据库密码private static String PASSWORD = "123456";
    ​public static void generation(String tableName) {// 6个主要的配置:pojo路径、dao路径、service路径、controller路径、mapper路径、xml文件路径FastAutoGenerator.create(URL, USERNAME, PASSWORD)
    ​// 全局配置.globalConfig(builder -> {builder.author("kule")// 用的knife4j,这里不需要启用swagger//.enableSwagger().disableOpenDir() // 禁止打开输出目录.dateType(DateType.TIME_PACK) // 时间类型为LocalDateTime.commentDate("yyyy-MM-dd HH:mm:ss") // 注释日期格式.outputDir(System.getProperty("user.dir") + "/" + MODULE_NAME + "/src/main/java").build(); // 指定输出目录})
    ​// 包配置.packageConfig(builder -> {builder.parent("site.lwer").entity("domain.entity").mapper("mapper").service("service").serviceImpl("service.impl").controller("controller").pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/" + MODULE_NAME +  "/src/main/resources/mapper")).build();})
    ​// 策略配置.strategyConfig(builder -> {builder.addInclude(tableName) // 表名.addTablePrefix("sys_") // 表名前缀.enableSkipView() // 跳过视图
    ​// 自定义实体类配置.entityBuilder()//.enableLombok() 使用自定义的entityLombokModel判断是否使用lombok 用@Data注解代替默认模版的 @Getter @Setter.naming(NamingStrategy.underline_to_camel) // 数据表映射实体命名: 驼峰命名.columnNaming(NamingStrategy.underline_to_camel) // 表字段映射实体命名: 驼峰命名.idType(IdType.ASSIGN_ID)   // 主键策略 自增
    ​// 自定义mapper配置.mapperBuilder().enableBaseResultMap()// 启用xml文件中的BaseResultMap 生成.enableBaseColumnList()// 启用xml文件中的BaseColumnList.formatMapperFileName("%sMapper")// 格式化Dao类名称
    ​// 自定义service配置.serviceBuilder().formatServiceFileName("%sService")// 格式化 service 接口文件名称.formatServiceImplFileName("%sServiceImpl")// 格式化 service 接口文件名称
    ​// 自定义controller配置.controllerBuilder().formatFileName("%sController") // 格式化 controller 文件名称.enableRestStyle()
    ​.build();})
    ​// 自定义模板配置.templateConfig(builder -> {builder.entity("/templates/entity.java").mapper("/templates/mapper.java").service("/templates/service.java").serviceImpl("/templates/serviceImpl.java").controller("/templates/controller.java");})
    ​// 注入自定义配置.injectionConfig(builder -> {String pack = tableName.substring(tableName.indexOf("_") + 1);//自定义生成模板参数,在vm模版里取值使用Map<String,Object> data = new HashMap<>();data.put("entityLombokModel", true);data.put("chainModel", true);builder.customMap(data);
    ​// 自定义DTO模版List<CustomFile> customFiles = new ArrayList();
    ​// DTO实体CustomFile idReqFile = new CustomFile.Builder().fileName("IdReq.java")//生成java文件名称,要和vm模版里的文件名保持一致.templatePath("/templates/idReq.java.vm")//实体模板位置.packageName("domain.dto." + pack)//生成文件包名.build();customFiles.add(idReqFile);
    ​CustomFile queryFile = new CustomFile.Builder().fileName("Query.java")//生成java文件名称,要和vm模版里的文件名保持一致.templatePath("/templates/query.java.vm")//实体模板位置.packageName("domain.dto." + pack)//生成文件包名.build();customFiles.add(queryFile);
    ​CustomFile saveFile = new CustomFile.Builder().fileName("SaveReq.java")//生成java文件名称,要和vm模版里的文件名保持一致.templatePath("/templates/saveReq.java.vm")//实体模板位置.packageName("domain.dto." + pack)//生成文件包名.build();customFiles.add(saveFile);
    ​CustomFile updateFile = new CustomFile.Builder().fileName("UpdateReq.java")//生成java文件名称,要和vm模版里的文件名保持一致.templatePath("/templates/updateReq.java.vm")//实体模板位置.packageName("domain.dto." + pack)//生成文件包名.build();customFiles.add(updateFile);
    ​// Vo实体CustomFile customFileVO = new CustomFile.Builder().fileName("VO.java").templatePath("/templates/VO.java.vm").packageName("domain.vo").build();customFiles.add(customFileVO);
    ​builder.customFile(customFiles);})
    ​.templateEngine(new VelocityTemplateEngine()).execute();}
    }
  • Entity模版

以entity模版举例,通过比对默认模版的语法和自定义entity的代码,模仿着先写出来我们需要的自定义模版,然后运行生成代码进行微调就可以了。

Tips:

  • Velocity模版里if中的判断有些在MybatisPlus对象中封装的,有些是通过injectionConfig自定义注入的

  • 单纯自己用,逻辑性没必要写的太强,建议多数包引用或者注解直接写死

  • 模板文件代码参考:登录 - Gitee.comicon-default.png?t=O83Ahttps://gitee.com/qiuxl/kule-blog/commit/bea095147a4af43f3cf08218a00f3d956f212566

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com