Commit 5e8988b73bc76fcbc6e49b2b0a3e3c2b3b922b22

Authored by YunaiV
1 parent fcef0f7f

✨ 增加 jakartaPackage 标识,统一 Spring Boot 2.X 和 3.X 代码生成的模版

yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
7 import cn.hutool.extra.template.TemplateConfig; 7 import cn.hutool.extra.template.TemplateConfig;
8 import cn.hutool.extra.template.TemplateEngine; 8 import cn.hutool.extra.template.TemplateEngine;
9 import cn.hutool.extra.template.engine.velocity.VelocityEngine; 9 import cn.hutool.extra.template.engine.velocity.VelocityEngine;
  10 +import cn.hutool.system.SystemUtil;
10 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; 11 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
11 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 12 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
12 import cn.iocoder.yudao.framework.common.pojo.PageParam; 13 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -35,10 +36,11 @@ import com.google.common.annotations.VisibleForTesting; @@ -35,10 +36,11 @@ import com.google.common.annotations.VisibleForTesting;
35 import com.google.common.collect.ImmutableTable; 36 import com.google.common.collect.ImmutableTable;
36 import com.google.common.collect.Maps; 37 import com.google.common.collect.Maps;
37 import com.google.common.collect.Table; 38 import com.google.common.collect.Table;
38 -import org.springframework.stereotype.Component;  
39 -  
40 import jakarta.annotation.PostConstruct; 39 import jakarta.annotation.PostConstruct;
41 import jakarta.annotation.Resource; 40 import jakarta.annotation.Resource;
  41 +import lombok.Setter;
  42 +import org.springframework.stereotype.Component;
  43 +
42 import java.util.*; 44 import java.util.*;
43 45
44 import static cn.hutool.core.map.MapUtil.getStr; 46 import static cn.hutool.core.map.MapUtil.getStr;
@@ -157,6 +159,15 @@ public class CodegenEngine { @@ -157,6 +159,15 @@ public class CodegenEngine {
157 private CodegenProperties codegenProperties; 159 private CodegenProperties codegenProperties;
158 160
159 /** 161 /**
  162 + * 是否使用 jakarta 包,用于解决 Spring Boot 2.X 和 3.X 的兼容性问题
  163 + *
  164 + * true - 使用 jakarta.validation.constraints.*
  165 + * false - 使用 javax.validation.constraints.*
  166 + */
  167 + @Setter // 允许设置的原因,是因为单测需要手动改变
  168 + private Boolean jakartaEnable;
  169 +
  170 + /**
160 * 模板引擎,由 hutool 实现 171 * 模板引擎,由 hutool 实现
161 */ 172 */
162 private final TemplateEngine templateEngine; 173 private final TemplateEngine templateEngine;
@@ -170,6 +181,8 @@ public class CodegenEngine { @@ -170,6 +181,8 @@ public class CodegenEngine {
170 TemplateConfig config = new TemplateConfig(); 181 TemplateConfig config = new TemplateConfig();
171 config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH); 182 config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);
172 this.templateEngine = new VelocityEngine(config); 183 this.templateEngine = new VelocityEngine(config);
  184 + // 设置 javaxEnable,按照是否使用 JDK17 来判断
  185 + this.jakartaEnable = SystemUtil.getJavaInfo().isJavaVersionAtLeast(1700); // 17.00 * 100
173 } 186 }
174 187
175 @PostConstruct 188 @PostConstruct
@@ -179,6 +192,7 @@ public class CodegenEngine { @@ -179,6 +192,7 @@ public class CodegenEngine {
179 globalBindingMap.put("basePackage", codegenProperties.getBasePackage()); 192 globalBindingMap.put("basePackage", codegenProperties.getBasePackage());
180 globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage() 193 globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage()
181 + '.' + "framework"); // 用于后续获取测试类的 package 地址 194 + '.' + "framework"); // 用于后续获取测试类的 package 地址
  195 + globalBindingMap.put("jakartaPackage", jakartaEnable ? "jakarta" : "javax");
182 // 全局 Java Bean 196 // 全局 Java Bean
183 globalBindingMap.put("CommonResultClassName", CommonResult.class.getName()); 197 globalBindingMap.put("CommonResultClassName", CommonResult.class.getName());
184 globalBindingMap.put("PageResultClassName", PageResult.class.getName()); 198 globalBindingMap.put("PageResultClassName", PageResult.class.getName());
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm
1 package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}; 1 package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName};
2 2
3 import org.springframework.web.bind.annotation.*; 3 import org.springframework.web.bind.annotation.*;
4 -import jakarta.annotation.Resource; 4 +import ${jakartaPackage}.annotation.Resource;
5 import org.springframework.validation.annotation.Validated; 5 import org.springframework.validation.annotation.Validated;
6 #if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end 6 #if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end
7 7
@@ -9,9 +9,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; @@ -9,9 +9,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
9 import io.swagger.v3.oas.annotations.Parameter; 9 import io.swagger.v3.oas.annotations.Parameter;
10 import io.swagger.v3.oas.annotations.Operation; 10 import io.swagger.v3.oas.annotations.Operation;
11 11
12 -import jakarta.validation.constraints.*;  
13 -import jakarta.validation.*;  
14 -import jakarta.servlet.http.*; 12 +import ${jakartaPackage}.validation.constraints.*;
  13 +import ${jakartaPackage}.validation.*;
  14 +import ${jakartaPackage}.servlet.http.*;
15 import java.util.*; 15 import java.util.*;
16 import java.io.IOException; 16 import java.io.IOException;
17 17
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/saveReqVO.vm
@@ -3,7 +3,7 @@ package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePac @@ -3,7 +3,7 @@ package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePac
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.*; 4 import lombok.*;
5 import java.util.*; 5 import java.util.*;
6 -import jakarta.validation.constraints.*; 6 +import ${jakartaPackage}.validation.constraints.*;
7 ## 处理 BigDecimal 字段的引入 7 ## 处理 BigDecimal 字段的引入
8 #foreach ($column in $columns) 8 #foreach ($column in $columns)
9 #if (${column.javaType} == "BigDecimal") 9 #if (${column.javaType} == "BigDecimal")
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/service.vm
1 package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; 1 package ${basePackage}.module.${table.moduleName}.service.${table.businessName};
2 2
3 import java.util.*; 3 import java.util.*;
4 -import jakarta.validation.*; 4 +import ${jakartaPackage}.validation.*;
5 import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; 5 import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*;
6 import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; 6 import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO;
7 ## 特殊:主子表专属逻辑 7 ## 特殊:主子表专属逻辑
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm
1 package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; 1 package ${basePackage}.module.${table.moduleName}.service.${table.businessName};
2 2
3 import org.springframework.stereotype.Service; 3 import org.springframework.stereotype.Service;
4 -import jakarta.annotation.Resource; 4 +import ${jakartaPackage}.annotation.Resource;
5 import org.springframework.validation.annotation.Validated; 5 import org.springframework.validation.annotation.Validated;
6 import org.springframework.transaction.annotation.Transactional; 6 import org.springframework.transaction.annotation.Transactional;
7 7
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm
@@ -4,7 +4,7 @@ import org.junit.jupiter.api.Disabled; @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Disabled;
4 import org.junit.jupiter.api.Test; 4 import org.junit.jupiter.api.Test;
5 import org.springframework.boot.test.mock.mockito.MockBean; 5 import org.springframework.boot.test.mock.mockito.MockBean;
6 6
7 -import jakarta.annotation.Resource; 7 +import ${jakartaPackage}.annotation.Resource;
8 8
9 import ${baseFrameworkPackage}.test.core.ut.BaseDbUnitTest; 9 import ${baseFrameworkPackage}.test.core.ut.BaseDbUnitTest;
10 10
@@ -13,7 +13,7 @@ import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.business @@ -13,7 +13,7 @@ import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.business
13 import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; 13 import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper;
14 import ${PageResultClassName}; 14 import ${PageResultClassName};
15 15
16 -import jakarta.annotation.Resource; 16 +import ${jakartaPackage}.annotation.Resource;
17 import org.springframework.context.annotation.Import; 17 import org.springframework.context.annotation.Import;
18 import java.util.*; 18 import java.util.*;
19 import java.time.LocalDateTime; 19 import java.time.LocalDateTime;
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java
@@ -45,7 +45,9 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest { @@ -45,7 +45,9 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
45 45
46 @BeforeEach 46 @BeforeEach
47 public void setUp() { 47 public void setUp() {
  48 + codegenEngine.setJakartaEnable(true); // 强制使用 jakarta,保证单测可以基于 jakarta 断言
48 codegenEngine.initGlobalBindingMap(); 49 codegenEngine.initGlobalBindingMap();
  50 + // 单测强制使用
49 // 获取测试文件 resources 路径 51 // 获取测试文件 resources 路径
50 String absolutePath = FileUtil.getAbsolutePath("application-unit-test.yaml"); 52 String absolutePath = FileUtil.getAbsolutePath("application-unit-test.yaml");
51 // 系统不一样生成的文件也有差异,那就各自生成各自的 53 // 系统不一样生成的文件也有差异,那就各自生成各自的