diff --git a/pom.xml b/pom.xml index 5013ee4..9c5b187 100644 --- a/pom.xml +++ b/pom.xml @@ -20,11 +20,11 @@ 17 UTF-8 - 3.5.0 - 2025.0.0 - 6.6.15.Final - 3.1.0 - 7.0 + 4.0.0 + 2025.1.0 + 7.1.8.Final + 4.0.0 + 7.1 1.6.3 1.5.0 @@ -103,12 +103,12 @@ org.apache.maven.plugins maven-source-plugin - 3.3.1 + 3.4.0 org.apache.maven.plugins maven-compiler-plugin - 3.14.0 + 3.14.1 org.hibernate diff --git a/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/Helper.java b/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/Helper.java index 718b127..d15eb67 100644 --- a/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/Helper.java +++ b/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/Helper.java @@ -8,11 +8,11 @@ import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy; +import org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.schema.TargetType; -import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy; +import org.springframework.boot.hibernate.SpringImplicitNamingStrategy; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.util.ClassUtils; @@ -54,7 +54,7 @@ public class Helper { var metadataSources = new MetadataSources( new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", dialect.getName()) - .applySetting("hibernate.physical_naming_strategy", CamelCaseToUnderscoresNamingStrategy.class.getName()) + .applySetting("hibernate.physical_naming_strategy", PhysicalNamingStrategySnakeCaseImpl.class.getName()) .applySetting("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName()) .applySetting("hibernate.connection.url", jdbc) .applySetting("hibernate.connection.username", username) @@ -231,7 +231,7 @@ public class Helper { // 2. 前一个字符是数字 // 3. 当前大写字母不是最后一个字符,且下一个字符是小写(处理连续大写字母如"XMLParser" -> "xml_parser") char previousChar = camelCase.charAt(i - 1); - if (Character.isLowerCase(previousChar) + if (Character.isLowerCase(previousChar) || Character.isDigit(previousChar) || (i < camelCase.length() - 1 && Character.isLowerCase(camelCase.charAt(i + 1)))) { result.append('_'); diff --git a/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/entity/SnowflakeIdGenerator.java b/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/entity/SnowflakeIdGenerator.java index 74b2357..7ed796d 100644 --- a/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/entity/SnowflakeIdGenerator.java +++ b/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/entity/SnowflakeIdGenerator.java @@ -5,10 +5,9 @@ import java.time.Instant; import lombok.extern.slf4j.Slf4j; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.id.IdentifierGenerator; -import org.hibernate.id.factory.spi.StandardGenerator; @Slf4j -public class SnowflakeIdGenerator implements IdentifierGenerator, StandardGenerator { +public class SnowflakeIdGenerator implements IdentifierGenerator { @Override public Serializable generate(SharedSessionContractImplementor session, Object object) { try { diff --git a/spring-boot-service-template-jpa/src/test/java/com/lanyuanxiaoyao/service/template/jpa/TestApplication.java b/spring-boot-service-template-jpa/src/test/java/com/lanyuanxiaoyao/service/template/jpa/TestApplication.java index 8034931..d4e0d28 100644 --- a/spring-boot-service-template-jpa/src/test/java/com/lanyuanxiaoyao/service/template/jpa/TestApplication.java +++ b/spring-boot-service-template-jpa/src/test/java/com/lanyuanxiaoyao/service/template/jpa/TestApplication.java @@ -1,9 +1,6 @@ package com.lanyuanxiaoyao.service.template.jpa; import com.blinkfox.fenix.EnableFenix; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.lanyuanxiaoyao.service.template.jpa.entity.Company; import com.lanyuanxiaoyao.service.template.jpa.entity.Company_; import com.lanyuanxiaoyao.service.template.jpa.entity.Employee; @@ -26,6 +23,8 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.Assert; import org.springframework.web.client.RestTemplate; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author lanyuanxiaoyao @@ -47,7 +46,7 @@ public class TestApplication { } @EventListener(ApplicationReadyEvent.class) - public void runTests() throws JsonProcessingException { + public void runTests() { // 增 var cid1 = saveItem("company", "{\"name\": \"Apple\",\"members\": 10}").get("data").asLong(); var cid2 = saveItem("company", "{\"name\": \"Banana\",\"members\": 20}").get("data").asLong(); @@ -150,7 +149,7 @@ public class TestApplication { } @EventListener(ApplicationReadyEvent.class) - public void runSpecificationTests() throws JsonProcessingException { + public void runSpecificationTests() { // 增 var cid1 = saveItem("company", "{\"name\": \"Apple\",\"members\": 10}").get("data").asLong(); var cid2 = saveItem("company", "{\"name\": \"Banana\",\"members\": 20}").get("data").asLong(); @@ -232,7 +231,7 @@ public class TestApplication { } @EventListener(ApplicationReadyEvent.class) - public void runNativeQueryTests() throws JsonProcessingException { + public void runNativeQueryTests() { // 增 var cid1 = saveItem("company", "{\"name\": \"Apple\",\"members\": 10}").get("data").asLong(); var cid2 = saveItem("company", "{\"name\": \"Banana\",\"members\": 20}").get("data").asLong(); @@ -255,7 +254,7 @@ public class TestApplication { return headers; } - private JsonNode saveItem(String path, String body) throws JsonProcessingException { + private JsonNode saveItem(String path, String body) { var response = REST_CLIENT.postForEntity( "%s/%s/save".formatted(BASE_URL, path), new HttpEntity<>(body, headers()), @@ -266,7 +265,7 @@ public class TestApplication { return MAPPER.readTree(response.getBody()); } - private JsonNode listItems(String path) throws JsonProcessingException { + private JsonNode listItems(String path) { var response = REST_CLIENT.getForEntity( "%s/%s/list".formatted(BASE_URL, path), String.class @@ -276,7 +275,7 @@ public class TestApplication { return MAPPER.readTree(response.getBody()); } - private JsonNode listItems(String path, String query) throws JsonProcessingException { + private JsonNode listItems(String path, String query) { var response = REST_CLIENT.postForEntity( "%s/%s/list".formatted(BASE_URL, path), new HttpEntity<>(query, headers()), @@ -287,7 +286,7 @@ public class TestApplication { return MAPPER.readTree(response.getBody()); } - private JsonNode detailItem(String path, Long id) throws JsonProcessingException { + private JsonNode detailItem(String path, Long id) { var response = REST_CLIENT.getForEntity( "%s/%s/detail/%d".formatted(BASE_URL, path, id), String.class