实战:定制化MyBatis-Plus代码生成器以优化MyBatis模板

作者:宇宙中心我曹县2024.08.14 20:53浏览量:24

简介:本文将详细介绍如何在MyBatis-Plus中定制代码生成器,特别是如何修改MyBatis的模板以生成更符合项目需求的代码。通过实战步骤和示例代码,非专业读者也能轻松上手,实现自动化代码生成的高效与灵活性。

引言

MyBatis-Plus作为一款强大的MyBatis增强工具,其内置的代码生成器极大提升了开发效率。然而,在实际项目中,我们常常需要对生成的代码进行定制,以满足特定的项目需求。本文将引导你如何修改MyBatis-Plus的代码生成器模板,特别是针对MyBatis部分的模板,以生成更符合你项目风格的代码。

1. 理解MyBatis-Plus代码生成器

MyBatis-Plus的代码生成器通过读取数据库表结构,自动生成对应的Entity、Mapper、Mapper XML、Service、Controller等文件。它支持通过配置文件或编程方式自定义生成逻辑。

2. 定位模板文件

MyBatis-Plus的代码生成器模板默认位于mybatis-plus-generator/src/main/resources/templates目录下。对于MyBatis部分,我们主要关注mapper.xml.ftl这个模板文件,它负责生成Mapper XML文件。

3. 修改模板文件

步骤一:复制模板文件

首先,将mapper.xml.ftl文件从mybatis-plus-generator的jar包中复制出来,或者直接从源代码仓库中获取,并放置在你的项目中,例如src/main/resources/mybatis-plus-generator/templates

步骤二:修改模板内容

使用文本编辑器打开mapper.xml.ftl文件,根据需求进行修改。比如,你可能想要调整SQL语句的格式、添加自定义的SQL片段,或者改变生成的XML结构。

下面是一个简单的示例,展示了如何修改模板以添加自定义的SQL注释:

  1. <#-- 在<mapper>标签中添加自定义的namespace前缀 -->
  2. <mapper namespace="${package.Mapper}.${table.mapperName}">
  3. <#-- 遍历表字段,生成selectById -->
  4. <select id="selectById" resultType="${resultMap}">
  5. SELECT
  6. <#list table.fieldList as field>
  7. <#if field.propertyType == "String" || (field.propertyType!starts_with("java.lang"))>
  8. ${field.property} AS ${field.propertyCamelHump},
  9. <#else>
  10. ${field.property},
  11. </#if>
  12. </#list>
  13. FROM ${table.name}
  14. WHERE ${pk.column} = #{${pk.property}}
  15. <!-- 这里添加自定义的SQL注释 -->
  16. <!-- Custom SQL Comment: 查询指定ID的数据项 -->
  17. </select>
  18. ...
  19. </mapper>

步骤三:配置代码生成器

在代码中配置MyBatis-Plus的代码生成器时,需要指定模板路径为你修改后的模板文件位置。

```java
// 初始化代码生成器
AutoGenerator mpg = new AutoGenerator();

// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty(“user.dir”);
gc.setOutputDir(projectPath + “/src/main/java”);
gc.setAuthor(“YourName”);

mpg.setGlobalConfig(gc);

// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(“jdbc:mysql://localhost:3306/yourdb?useUnicode=true&useSSL=false&characterEncoding=utf8”);

mpg.setDataSource(dsc);

// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(“com.yourcompany.project”);
pc.setMapper(“mapper”);

mpg.setPackageInfo(pc);

// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);

mpg.setStrategy(strategy);

// 模板配置
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null); // 取消默认XML模板
// 设置自定义模板路径
templateConfig.setEntity(“/templates/entity.ftl”);
templateConfig.setMapper(“/templates/mapper.ftl”); // 注意路径要与你的文件结构一致