diff --git a/example/example-app/example-app-cmd-domain/pom.xml b/example/example-app/example-app-cmd-domain/pom.xml
index 240ac68d..3ec2c103 100644
--- a/example/example-app/example-app-cmd-domain/pom.xml
+++ b/example/example-app/example-app-cmd-domain/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-app
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-app/example-app-cmd-meta/pom.xml b/example/example-app/example-app-cmd-meta/pom.xml
index 2f3193b1..93978462 100644
--- a/example/example-app/example-app-cmd-meta/pom.xml
+++ b/example/example-app/example-app-cmd-meta/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-app
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-app/example-app-query/pom.xml b/example/example-app/example-app-query/pom.xml
index c02f3e24..d0d0b8f8 100644
--- a/example/example-app/example-app-query/pom.xml
+++ b/example/example-app/example-app-query/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-app
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-app/pom.xml b/example/example-app/pom.xml
index 3cae6d2a..2558b77b 100644
--- a/example/example-app/pom.xml
+++ b/example/example-app/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-example
- 3.4.39
+ 3.4.41
../pom.xml
pom
diff --git a/example/example-domain/example-domain-leave/pom.xml b/example/example-domain/example-domain-leave/pom.xml
index 16003c0a..46bef0fc 100644
--- a/example/example-domain/example-domain-leave/pom.xml
+++ b/example/example-domain/example-domain-leave/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-domain
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-domain/example-domain-user/pom.xml b/example/example-domain/example-domain-user/pom.xml
index 2c024ab6..5723c837 100644
--- a/example/example-domain/example-domain-user/pom.xml
+++ b/example/example-domain/example-domain-user/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-domain
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-domain/pom.xml b/example/example-domain/pom.xml
index 4145fdd6..09986be1 100644
--- a/example/example-domain/pom.xml
+++ b/example/example-domain/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-example
- 3.4.39
+ 3.4.41
../pom.xml
4.0.0
diff --git a/example/example-infra/example-infra-flow/pom.xml b/example/example-infra/example-infra-flow/pom.xml
index e2b24698..79b8f020 100644
--- a/example/example-infra/example-infra-flow/pom.xml
+++ b/example/example-infra/example-infra-flow/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
example-infra
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-infra/example-infra-jpa/pom.xml b/example/example-infra/example-infra-jpa/pom.xml
index 7d98b344..a1a63ffa 100644
--- a/example/example-infra/example-infra-jpa/pom.xml
+++ b/example/example-infra/example-infra-jpa/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
example-infra
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-infra/example-infra-security/pom.xml b/example/example-infra/example-infra-security/pom.xml
index f8205d84..6def65b6 100644
--- a/example/example-infra/example-infra-security/pom.xml
+++ b/example/example-infra/example-infra-security/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-infra
- 3.4.39
+ 3.4.41
../pom.xml
diff --git a/example/example-infra/pom.xml b/example/example-infra/pom.xml
index fee8b269..d93f9d96 100644
--- a/example/example-infra/pom.xml
+++ b/example/example-infra/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-example
- 3.4.39
+ 3.4.41
../pom.xml
pom
diff --git a/example/example-interface/pom.xml b/example/example-interface/pom.xml
index a73049c6..2091fffb 100644
--- a/example/example-interface/pom.xml
+++ b/example/example-interface/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-example
- 3.4.39
+ 3.4.41
example-interface
diff --git a/example/example-server/pom.xml b/example/example-server/pom.xml
index 4ef599ce..6490bac0 100644
--- a/example/example-server/pom.xml
+++ b/example/example-server/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.4.39
+ 3.4.41
4.0.0
diff --git a/example/example-server/src/main/resources/application.properties b/example/example-server/src/main/resources/application.properties
index 35a250d8..7f97bcb2 100644
--- a/example/example-server/src/main/resources/application.properties
+++ b/example/example-server/src/main/resources/application.properties
@@ -1,16 +1,16 @@
server.port=8090
application.version=@project.version@
-#spring.datasource.driver-class-name=org.h2.Driver
-#spring.datasource.url=jdbc:h2:file:./example.db
-#spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+spring.datasource.driver-class-name=org.h2.Driver
+spring.datasource.url=jdbc:h2:file:./example.db
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://localhost:3306/flow?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
-spring.datasource.username=root
-spring.datasource.password=12345678
-spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.url=jdbc:mysql://localhost:3306/flow?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+#spring.datasource.username=root
+#spring.datasource.password=12345678
+#spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
diff --git a/example/pom.xml b/example/pom.xml
index 900d3c89..0fa5ea5c 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -19,7 +19,7 @@
springboot-example
- 3.4.39
+ 3.4.41
springboot-example
springboot-example project for Spring Boot
diff --git a/pom.xml b/pom.xml
index 03dcef18..0f576a03 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
com.codingapi.springboot
springboot-parent
- 3.4.39
+ 3.4.41
https://github.com/codingapi/springboot-framewrok
springboot-parent
diff --git a/springboot-starter-data-authorization/pom.xml b/springboot-starter-data-authorization/pom.xml
index d85a4c11..ad44651e 100644
--- a/springboot-starter-data-authorization/pom.xml
+++ b/springboot-starter-data-authorization/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-parent
- 3.4.39
+ 3.4.41
springboot-starter-data-authorization
diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml
index 5f3b737f..adab3cac 100644
--- a/springboot-starter-data-fast/pom.xml
+++ b/springboot-starter-data-fast/pom.xml
@@ -5,7 +5,7 @@
springboot-parent
com.codingapi.springboot
- 3.4.39
+ 3.4.41
4.0.0
diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/classloader/DynamicTableClassLoader.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/classloader/DynamicTableClassLoader.java
index cf182bf2..243634e6 100644
--- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/classloader/DynamicTableClassLoader.java
+++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/classloader/DynamicTableClassLoader.java
@@ -31,6 +31,7 @@ private DynamicTableClassLoader() {
*/
public void registerClass(String className, Class> clazz) {
dynamicTableClassLoader.registerClass(className, clazz);
+ Thread.currentThread().setContextClassLoader(dynamicTableClassLoader);
}
/**
@@ -39,6 +40,7 @@ public void registerClass(String className, Class> clazz) {
*/
public void registerClass(Class> clazz) {
dynamicTableClassLoader.registerClass(clazz);
+ Thread.currentThread().setContextClassLoader(dynamicTableClassLoader);
}
/**
@@ -66,6 +68,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
*/
public void cleanDynamicClass(String name) {
dynamicTableClassLoader.cleanClass(name);
+ Thread.currentThread().setContextClassLoader(dynamicTableClassLoader);
}
/**
diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContextRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContextRegister.java
index 1d765f9d..a00717ef 100644
--- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContextRegister.java
+++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContextRegister.java
@@ -6,7 +6,7 @@
@AllArgsConstructor
public class JpaQueryContextRegister implements InitializingBean {
- private JpaQuery jpaQuery;
+ private final JpaQuery jpaQuery;
@Override
public void afterPropertiesSet() throws Exception {
diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityClassBuilder.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityClassBuilder.java
index aa28ec97..99bc9c4d 100644
--- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityClassBuilder.java
+++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityClassBuilder.java
@@ -12,6 +12,7 @@
import org.springframework.util.StringUtils;
import java.io.Serializable;
+import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
@@ -146,6 +147,12 @@ private List buildFieldAnnotations(
TableEntityMetadata.ColumnMeta columnMeta) {
List annotations = new ArrayList<>();
+ if (columnMeta.getAnnotationClasses() != null) {
+ for(Class extends Annotation> annotaionClass: columnMeta.getAnnotationClasses()) {
+ annotations.add(AnnotationDescription.Builder.ofType(annotaionClass).build());
+ }
+ }
+
// @Id 注解
if (columnMeta.isPrimaryKey()) {
annotations.add(AnnotationDescription.Builder.ofType(Id.class).build());
diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityMetadata.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityMetadata.java
index d3b9154f..ea7576c3 100644
--- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityMetadata.java
+++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityMetadata.java
@@ -4,8 +4,10 @@
import lombok.Getter;
import lombok.Setter;
+import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* 表实体元数据
@@ -64,6 +66,10 @@ public static class ColumnMeta {
* 主键自增策略
*/
private GeneratedValueMeta generatedValue;
+ /**
+ * 字段注解
+ */
+ private Set> annotationClasses;
/**
* 备注
*/
@@ -149,8 +155,12 @@ public void setTable(String name) {
this.setTable(name, null, null, null);
}
+ public void addColumn(ColumnMeta column) {
+ this.columns.add(column);
+ }
+
public void addPrimaryKeyColumn(Class> type, String fieldName, String columnName, GenerationType strategy,
- String generator, String comment, boolean isLob, boolean unique, boolean nullable,
+ String generator, Set> annotationClasses, String comment, boolean isLob, boolean unique, boolean nullable,
boolean insertable, boolean updatable, String columnDefinition,
int length, int precision, int scale) {
ColumnMeta column = new ColumnMeta();
@@ -161,6 +171,7 @@ public void addPrimaryKeyColumn(Class> type, String fieldName, String columnNa
GeneratedValueMeta generatedValueMeta = new GeneratedValueMeta();
generatedValueMeta.setGenerator(generator);
generatedValueMeta.setStrategy(strategy);
+ column.setAnnotationClasses(annotationClasses);
column.setGeneratedValue(generatedValueMeta);
column.setLob(isLob);
column.setComment(comment);
@@ -172,7 +183,7 @@ public void addPrimaryKeyColumn(Class> type, String fieldName, String columnNa
column.setLength(length);
column.setPrecision(precision);
column.setScale(scale);
- this.columns.add(column);
+ this.addColumn(column);
}
public void addColumn(Class> type, String fieldName, String columnName, String comment, boolean isLob,
@@ -194,7 +205,7 @@ public void addColumn(Class> type, String fieldName, String columnName, String
column.setLength(length);
column.setPrecision(precision);
column.setScale(scale);
- this.columns.add(column);
+ this.addColumn(column);
}
public void addColumn(Class> type, String name, String comment) {
@@ -214,15 +225,23 @@ public void addColumn(Class> type, String name) {
}
public void addPrimaryKeyColumn(Class> type, String name) {
- this.addPrimaryKeyColumn(type, name, name, null, null, null, false, false, false, false, false, null, 255, 0, 0);
+ this.addPrimaryKeyColumn(type, name, name, null, null, null, null, false, false, false, false, false, null, 255, 0, 0);
+ }
+
+ public void addPrimaryKeyColumn(Class> type, String name, String comment) {
+ this.addPrimaryKeyColumn(type, name, name, null, null, null, comment, false, false, false, false, false, null, 255, 0, 0);
}
public void addPrimaryKeyColumn(Class> type, String name, GenerationType strategy) {
- this.addPrimaryKeyColumn(type, name, name, strategy, null, null, false, false, false, false, false, null, 255, 0, 0);
+ this.addPrimaryKeyColumn(type, name, name, strategy, null, null, null, false, false, false, false, false, null, 255, 0, 0);
}
public void addPrimaryKeyColumn(Class> type, String name, GenerationType strategy, String comment) {
- this.addPrimaryKeyColumn(type, name, name, strategy, null, comment, false, false, false, false, false, null, 255, 0, 0);
+ this.addPrimaryKeyColumn(type, name, name, strategy, null, null, comment, false, false, false, false, false, null, 255, 0, 0);
+ }
+
+ public void addPrimaryKeyColumn(Class> type, String name, Set> annotationClasses, String comment) {
+ this.addPrimaryKeyColumn(type, name, name, null, null, annotationClasses, comment, false, false, false, false, false, null, 255, 0, 0);
}
public void verify() {
diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/MyTestRepositoryTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/MyTestRepositoryTest.java
new file mode 100644
index 00000000..19a9e1e4
--- /dev/null
+++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/MyTestRepositoryTest.java
@@ -0,0 +1,26 @@
+package com.codingapi.springboot.fast;
+
+import com.codingapi.springboot.fast.entity.MyTest;
+import com.codingapi.springboot.fast.repository.MyTestRepository;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@Slf4j
+@SpringBootTest
+public class MyTestRepositoryTest {
+
+ @Autowired
+ private MyTestRepository myTestRepository;
+
+ @Test
+ void test() {
+ MyTest demo = new MyTest();
+ demo.setName("123");
+ myTestRepository.save(demo);
+ }
+
+
+
+}
diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/annotation/MyIdSequence.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/annotation/MyIdSequence.java
new file mode 100644
index 00000000..357e7b1e
--- /dev/null
+++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/annotation/MyIdSequence.java
@@ -0,0 +1,18 @@
+package com.codingapi.springboot.fast.annotation;
+
+import com.codingapi.springboot.fast.strategy.MyIdGenerator;
+import org.hibernate.annotations.IdGeneratorType;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@IdGeneratorType(MyIdGenerator.class)
+@Retention(RUNTIME)
+@Target({METHOD,FIELD})
+public @interface MyIdSequence {
+
+}
diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/MyTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/MyTest.java
new file mode 100644
index 00000000..ed8f2eed
--- /dev/null
+++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/MyTest.java
@@ -0,0 +1,18 @@
+package com.codingapi.springboot.fast.entity;
+
+import com.codingapi.springboot.fast.annotation.MyIdSequence;
+import jakarta.persistence.*;
+import lombok.Data;
+
+
+@Data
+@Entity
+@Table(name = "t_test")
+public class MyTest {
+
+ @Id
+ @MyIdSequence
+ private Integer id;
+
+ private String name;
+}
diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/generator/DynamicTableGeneratorTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/generator/DynamicTableGeneratorTest.java
index cb931677..0a2908a5 100644
--- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/generator/DynamicTableGeneratorTest.java
+++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/generator/DynamicTableGeneratorTest.java
@@ -8,13 +8,13 @@
import java.util.List;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
class DynamicTableGeneratorTest {
@Test
void generateTableDDL() {
- DynamicTableGenerator dynamicTableGenerator = new DynamicTableGenerator(H2Dialect.class,"jdbc:h2:file:./test.db");
+ DynamicTableGenerator dynamicTableGenerator = new DynamicTableGenerator(H2Dialect.class, "jdbc:h2:file:./test.db");
List exceptions = dynamicTableGenerator.validatorTable(Demo.class);
System.out.println(exceptions);
@@ -33,13 +33,13 @@ void generateTableDDL() {
@Test
void dynamicGenerateTableDDL() {
- DynamicTableGenerator dynamicTableGenerator = new DynamicTableGenerator(H2Dialect.class,"jdbc:h2:file:./test.db");
+ DynamicTableGenerator dynamicTableGenerator = new DynamicTableGenerator(H2Dialect.class, "jdbc:h2:file:./test.db");
TableEntityMetadata tableEntityMetadata = new TableEntityMetadata("com.codingapi.entity.Test");
tableEntityMetadata.setTable("test");
- tableEntityMetadata.addPrimaryKeyColumn(Long.class,"id", GenerationType.IDENTITY,"主键");
- tableEntityMetadata.addColumn(String.class,"name","姓名");
- tableEntityMetadata.addColumn(String.class,"desc","描述",true);
+ tableEntityMetadata.addPrimaryKeyColumn(Long.class, "id", GenerationType.IDENTITY, "主键");
+ tableEntityMetadata.addColumn(String.class, "name", "姓名");
+ tableEntityMetadata.addColumn(String.class, "desc", "描述", true);
Class> entityClass = tableEntityMetadata.buildClass();
diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/MyTestRepository.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/MyTestRepository.java
new file mode 100644
index 00000000..44c42c81
--- /dev/null
+++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/MyTestRepository.java
@@ -0,0 +1,8 @@
+package com.codingapi.springboot.fast.repository;
+
+import com.codingapi.springboot.fast.entity.MyTest;
+import com.codingapi.springboot.fast.jpa.repository.FastRepository;
+
+public interface MyTestRepository extends FastRepository {
+
+}
diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/strategy/MyIdGenerator.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/strategy/MyIdGenerator.java
new file mode 100644
index 00000000..c1dd478d
--- /dev/null
+++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/strategy/MyIdGenerator.java
@@ -0,0 +1,27 @@
+package com.codingapi.springboot.fast.strategy;
+
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.hibernate.generator.BeforeExecutionGenerator;
+import org.hibernate.generator.EventType;
+
+import java.util.EnumSet;
+import java.util.Random;
+
+import static org.hibernate.generator.EventTypeSets.INSERT_ONLY;
+
+public class MyIdGenerator implements BeforeExecutionGenerator {
+
+ private final Random random = new Random();
+
+ @Override
+ public Object generate(SharedSessionContractImplementor session, Object owner, Object currentValue, EventType eventType) {
+ int id = random.nextInt(1000);
+ System.out.println("id:"+id);
+ return id;
+ }
+
+ @Override
+ public EnumSet getEventTypes() {
+ return INSERT_ONLY;
+ }
+}
diff --git a/springboot-starter-flow/pom.xml b/springboot-starter-flow/pom.xml
index d4e2890d..c8dade09 100644
--- a/springboot-starter-flow/pom.xml
+++ b/springboot-starter-flow/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.4.39
+ 3.4.41
springboot-starter-flow
diff --git a/springboot-starter-security/pom.xml b/springboot-starter-security/pom.xml
index bbdd5daf..fa93fb1f 100644
--- a/springboot-starter-security/pom.xml
+++ b/springboot-starter-security/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.4.39
+ 3.4.41
springboot-starter-security
diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml
index 6b32c5ad..2df5657f 100644
--- a/springboot-starter/pom.xml
+++ b/springboot-starter/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-parent
- 3.4.39
+ 3.4.41
springboot-starter