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 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