From 9b5b2925ca63cadc79ea7f7306eb28d25044391c Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:09:55 +0800 Subject: [PATCH 01/29] add persistence module --- pom.xml | 3 + springboot-starter-persistence/pom.xml | 34 +++++ .../persistence/AutoConfiguration.java | 17 +++ .../persistence/DomainPersistence.java | 9 ++ .../jdbc/JdbcAutoConfiguration.java | 29 ++++ .../jdbc/JdbcDomainPersistence.java | 60 ++++++++ .../persistence/jdbc/JdbcSchemaExecutor.java | 22 +++ .../persistence/jdbc/JdbcSchemaFactory.java | 14 ++ .../jdbc/schema/JdbcBuildSchema.java | 35 +++++ .../jdbc/schema/JdbcSaveSchema.java | 34 +++++ .../persistence/jdbc/schema/JdbcSchema.java | 28 ++++ .../jdbc/schema/JdbcSearchSchema.java | 18 +++ .../register/DomainClassRegister.java | 29 ++++ .../persistence/scanner/SchemaContext.java | 30 ++++ .../persistence/scanner/SchemaScanner.java | 35 +++++ .../persistence/schema/BuildSchema.java | 12 ++ .../persistence/schema/Property.java | 141 ++++++++++++++++++ .../persistence/schema/SaveSchema.java | 35 +++++ .../springboot/persistence/schema/Schema.java | 33 ++++ .../persistence/schema/SchemaExecutor.java | 7 + .../persistence/schema/SchemaFactory.java | 6 + .../persistence/schema/SchemaProperty.java | 49 ++++++ .../persistence/schema/SearchSchema.java | 20 +++ .../main/resources/META-INF/spring.factories | 3 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../example/demo/PersistenceApplication.java | 12 ++ .../java/com/example/demo/domain/Demo.java | 12 ++ .../example/demo/register/DomainRegister.java | 15 ++ .../demo/repository/DemoRepository.java | 24 +++ .../demo/repository/DemoRepositoryTests.java | 41 +++++ .../src/test/resources/application.properties | 1 + 31 files changed, 810 insertions(+) create mode 100644 springboot-starter-persistence/pom.xml create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java create mode 100644 springboot-starter-persistence/src/main/resources/META-INF/spring.factories create mode 100644 springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java create mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java create mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java create mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java create mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java create mode 100644 springboot-starter-persistence/src/test/resources/application.properties diff --git a/pom.xml b/pom.xml index a4dd64e2..c71d1447 100644 --- a/pom.xml +++ b/pom.xml @@ -220,6 +220,7 @@ springboot-starter-security-jwt springboot-starter-data-fast springboot-starter-id-generator + springboot-starter-persistence @@ -232,6 +233,7 @@ springboot-starter-security-jwt springboot-starter-data-fast springboot-starter-id-generator + springboot-starter-persistence @@ -282,6 +284,7 @@ springboot-starter-security-jwt springboot-starter-data-fast springboot-starter-id-generator + springboot-starter-persistence diff --git a/springboot-starter-persistence/pom.xml b/springboot-starter-persistence/pom.xml new file mode 100644 index 00000000..d4b08d2d --- /dev/null +++ b/springboot-starter-persistence/pom.xml @@ -0,0 +1,34 @@ + + + + springboot-parent + com.codingapi.springboot + 3.1.6 + + 4.0.0 + + springboot-starter-persistence + + + 17 + + + + + + org.springframework.boot + spring-boot-starter-jdbc + provided + + + + com.h2database + h2 + test + + + + + \ No newline at end of file diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java new file mode 100644 index 00000000..45f492b6 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java @@ -0,0 +1,17 @@ +package com.codingapi.springboot.persistence; + +import com.codingapi.springboot.persistence.scanner.SchemaScanner; +import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.schema.SchemaFactory; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.context.annotation.Bean; + +@Configurable +public class AutoConfiguration { + + @Bean + public SchemaScanner domainScanner(SchemaExecutor schemaExecutor, SchemaFactory schemaFactory) { + return new SchemaScanner(schemaExecutor, schemaFactory); + } + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java new file mode 100644 index 00000000..1fa6c8b0 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java @@ -0,0 +1,9 @@ +package com.codingapi.springboot.persistence; + +public interface DomainPersistence { + + void save(Object domain); + + T get(Class domainClass, Object id); + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java new file mode 100644 index 00000000..1d5f50c4 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java @@ -0,0 +1,29 @@ +package com.codingapi.springboot.persistence.jdbc; + +import com.codingapi.springboot.persistence.DomainPersistence; +import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.schema.SchemaFactory; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.jdbc.core.JdbcTemplate; + +@ConditionalOnClass(JdbcTemplate.class) +@Configurable +public class JdbcAutoConfiguration { + + @Bean + public SchemaExecutor schemaExecutor(JdbcTemplate jdbcTemplate) { + return new JdbcSchemaExecutor(jdbcTemplate); + } + + @Bean + public DomainPersistence domainPersistence(JdbcTemplate jdbcTemplate) { + return new JdbcDomainPersistence(jdbcTemplate); + } + + @Bean + public SchemaFactory schemaFactory() { + return new JdbcSchemaFactory(); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java new file mode 100644 index 00000000..d64c9443 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java @@ -0,0 +1,60 @@ +package com.codingapi.springboot.persistence.jdbc; + +import com.codingapi.springboot.persistence.DomainPersistence; +import com.codingapi.springboot.persistence.scanner.SchemaContext; +import com.codingapi.springboot.persistence.schema.SaveSchema; +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.SearchSchema; +import lombok.AllArgsConstructor; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.support.GeneratedKeyHolder; +import org.springframework.jdbc.support.KeyHolder; + +import java.sql.PreparedStatement; +import java.sql.Statement; + +@AllArgsConstructor +public class JdbcDomainPersistence implements DomainPersistence { + + private final JdbcTemplate jdbcTemplate; + + @Override + public void save(Object domain) { + Schema schema = SchemaContext.getINSTANCE().getSchema(domain.getClass()); + if (schema != null) { + SaveSchema saveSchema = schema.insertSchema(); + if (schema.getSchemaProperty().hasIdValue(domain)) { + jdbcTemplate.update(saveSchema.saveSchema(), saveSchema.getSaveValues(domain)); + } else { + KeyHolder keyHolder = new GeneratedKeyHolder(); + jdbcTemplate.update(con -> { + PreparedStatement ps = con.prepareStatement(saveSchema.saveSchema(false), Statement.RETURN_GENERATED_KEYS); + int index = 1; + for (Object value : saveSchema.getSaveValues(domain, false)) { + ps.setObject(index++, value); + } + return ps; + }, keyHolder); + schema.getSchemaProperty().setIdValue(domain, keyHolder.getKey()); + } + } + } + + @Override + public T get(Class domainClass, Object id) { + Schema schema = SchemaContext.getINSTANCE().getSchema(domainClass); + if (schema != null) { + SearchSchema searchSchema = schema.getById(); + String sql = searchSchema.getById(); + try { + return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(domainClass)); + } catch (EmptyResultDataAccessException e) { + // Handle the case where no results are found or rethrow a custom exception + return null; + } + } + return null; + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java new file mode 100644 index 00000000..fe004d91 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java @@ -0,0 +1,22 @@ +package com.codingapi.springboot.persistence.jdbc; + +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import lombok.AllArgsConstructor; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +@Repository +@AllArgsConstructor +public class JdbcSchemaExecutor implements SchemaExecutor { + + private final JdbcTemplate jdbcTemplate; + + + @Override + public void create(Schema schema) { + jdbcTemplate.execute(schema.buildSchema().createSchema()); + } + + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java new file mode 100644 index 00000000..1cbfb250 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java @@ -0,0 +1,14 @@ +package com.codingapi.springboot.persistence.jdbc; + +import com.codingapi.springboot.persistence.jdbc.schema.JdbcSchema; +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.SchemaFactory; + +public class JdbcSchemaFactory implements SchemaFactory { + + @Override + public Schema getSchema(Class domainClass) { + return new JdbcSchema(domainClass); + } + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java new file mode 100644 index 00000000..55fd4ac7 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java @@ -0,0 +1,35 @@ +package com.codingapi.springboot.persistence.jdbc.schema; + +import com.codingapi.springboot.persistence.schema.BuildSchema; +import com.codingapi.springboot.persistence.schema.Property; +import com.codingapi.springboot.persistence.schema.Schema; + +import java.util.List; + +public class JdbcBuildSchema extends BuildSchema { + + public JdbcBuildSchema(Schema schema) { + super(schema); + } + + @Override + public String createSchema() { + StringBuilder sql = new StringBuilder(); + sql.append("CREATE TABLE IF NOT EXISTS "); + sql.append(property.getSchemaName()); + sql.append(" ("); + sql.append("id INT PRIMARY KEY AUTO_INCREMENT,"); + List properties = property.getProperties(false); + for (int i = 0; i < properties.size(); i++) { + Property property = properties.get(i); + sql.append(property.getName()); + sql.append(" "); + sql.append(property.getJdbcType()); + if (i != properties.size() - 1) { + sql.append(", "); + } + } + sql.append(")"); + return sql.toString(); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java new file mode 100644 index 00000000..612e3166 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java @@ -0,0 +1,34 @@ +package com.codingapi.springboot.persistence.jdbc.schema; + +import com.codingapi.springboot.persistence.schema.Property; +import com.codingapi.springboot.persistence.schema.SaveSchema; +import com.codingapi.springboot.persistence.schema.Schema; + +public class JdbcSaveSchema extends SaveSchema { + + public JdbcSaveSchema(Schema schema) { + super(schema); + } + + @Override + public String saveSchema(boolean hasId) { + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO "); + sql.append(property.getSchemaName()); + sql.append(" ("); + for (Property property : property.getProperties(hasId)) { + sql.append(property.getName()); + sql.append(", "); + } + sql.delete(sql.length() - 2, sql.length()); + sql.append(") VALUES ("); + for (Property property : property.getProperties(hasId)) { + sql.append("?, "); + } + sql.delete(sql.length() - 2, sql.length()); + sql.append(")"); + return sql.toString(); + } + + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java new file mode 100644 index 00000000..c5905a70 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java @@ -0,0 +1,28 @@ +package com.codingapi.springboot.persistence.jdbc.schema; + +import com.codingapi.springboot.persistence.schema.BuildSchema; +import com.codingapi.springboot.persistence.schema.SaveSchema; +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.SearchSchema; + +public class JdbcSchema extends Schema { + + public JdbcSchema(Class domainClass) { + super(domainClass); + } + + @Override + public BuildSchema buildSchema() { + return new JdbcBuildSchema(this); + } + + @Override + public SaveSchema insertSchema() { + return new JdbcSaveSchema(this); + } + + @Override + public SearchSchema getById() { + return new JdbcSearchSchema(this); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java new file mode 100644 index 00000000..babbfcc4 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java @@ -0,0 +1,18 @@ +package com.codingapi.springboot.persistence.jdbc.schema; + +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.SearchSchema; + +public class JdbcSearchSchema extends SearchSchema { + + public JdbcSearchSchema(Schema schema) { + super(schema); + } + + @Override + public String getById() { + return "SELECT * FROM " + property.getSchemaName() + " WHERE id = ?"; + } + + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java new file mode 100644 index 00000000..88bf69a9 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java @@ -0,0 +1,29 @@ +package com.codingapi.springboot.persistence.register; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +public class DomainClassRegister { + + private final List> classes; + + public final static DomainClassRegister INSTANCE = new DomainClassRegister(); + + private DomainClassRegister() { + this.classes = new ArrayList<>(); + } + + public void register(Class domainClass) { + this.classes.add(domainClass); + } + + public boolean supports(Class domainClass) { + return this.classes.stream() + .anyMatch(clazz -> clazz.equals(domainClass)); + + } + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java new file mode 100644 index 00000000..17f579f6 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java @@ -0,0 +1,30 @@ +package com.codingapi.springboot.persistence.scanner; + +import com.codingapi.springboot.persistence.schema.Schema; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +public class SchemaContext { + + @Getter + public final static SchemaContext INSTANCE = new SchemaContext(); + + private final List schemas; + + private SchemaContext() { + this.schemas = new ArrayList<>(); + } + + public void register(Schema schema) { + this.schemas.add(schema); + } + + public Schema getSchema(Class domainClass) { + return schemas.stream() + .filter(schema -> schema.getDomainClass().equals(domainClass)) + .findFirst() + .orElseThrow(() -> new RuntimeException("schema not found")); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java new file mode 100644 index 00000000..a8e2dd68 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java @@ -0,0 +1,35 @@ +package com.codingapi.springboot.persistence.scanner; + +import com.codingapi.springboot.persistence.register.DomainClassRegister; +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.schema.SchemaFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; + +import java.util.List; + +@Slf4j +public class SchemaScanner implements ApplicationRunner { + + private final SchemaExecutor schemaExecutor; + + private final SchemaFactory schemaFactory; + + public SchemaScanner(SchemaExecutor schemaExecutor, SchemaFactory schemaFactory) { + this.schemaExecutor = schemaExecutor; + this.schemaFactory = schemaFactory; + } + + @Override + public void run(ApplicationArguments args) throws Exception { + List> domainClasses = DomainClassRegister.INSTANCE.getClasses(); + for (Class domainClass : domainClasses) { + Schema schema = schemaFactory.getSchema(domainClass); + SchemaContext.INSTANCE.register(schema); + schemaExecutor.create(schema); + } + } + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java new file mode 100644 index 00000000..09fb8376 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java @@ -0,0 +1,12 @@ +package com.codingapi.springboot.persistence.schema; + +public abstract class BuildSchema { + + public abstract String createSchema(); + + protected final SchemaProperty property; + + public BuildSchema(Schema schema) { + this.property = schema.getSchemaProperty(); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java new file mode 100644 index 00000000..14ff61c2 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java @@ -0,0 +1,141 @@ +package com.codingapi.springboot.persistence.schema; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class Property { + + private final org.yaml.snakeyaml.introspector.Property property; + + public Property(org.yaml.snakeyaml.introspector.Property property) { + this.property = property; + } + + public boolean hasIdValue(Object domain) { + if (property.getType().equals(int.class)) + return property.get(domain) != null && (int) property.get(domain) > 0; + else if (property.getType().equals(long.class)) + return property.get(domain) != null && (long) property.get(domain) > 0; + else if (property.getType().equals(double.class)) + return property.get(domain) != null && (double) property.get(domain) > 0; + else if (property.getType().equals(float.class)) + return property.get(domain) != null && (float) property.get(domain) > 0; + else if (property.getType().equals(short.class)) + return property.get(domain) != null && (short) property.get(domain) > 0; + else if (property.getType().equals(byte.class)) + return property.get(domain) != null && (byte) property.get(domain) > 0; + else if (property.getType().equals(boolean.class)) + return property.get(domain) != null && (boolean) property.get(domain); + else if (property.getType().equals(Integer.class)) + return property.get(domain) != null && (Integer) property.get(domain) > 0; + else if (property.getType().equals(Long.class)) + return property.get(domain) != null && (Long) property.get(domain) > 0; + else if (property.getType().equals(Double.class)) + return property.get(domain) != null && (Double) property.get(domain) > 0; + else if (property.getType().equals(Float.class)) + return property.get(domain) != null && (Float) property.get(domain) > 0; + else if (property.getType().equals(Short.class)) + return property.get(domain) != null && (Short) property.get(domain) > 0; + else if (property.getType().equals(Byte.class)) + return property.get(domain) != null && (Byte) property.get(domain) > 0; + else if (property.getType().equals(Boolean.class)) + return property.get(domain) != null && (Boolean) property.get(domain); + else if (property.getType().equals(String.class)) + return property.get(domain) != null && !((String) property.get(domain)).isEmpty(); + else if (property.getType().equals(Object.class)) + return property.get(domain) != null; + else + throw new RuntimeException("not support type"); + } + + + public void setIdValue(Object domain, Number key) { + try { + if (property.getType().equals(int.class)) + property.set(domain, key.intValue()); + else if (property.getType().equals(long.class)) + property.set(domain, key.longValue()); + else if (property.getType().equals(double.class)) + property.set(domain, key.doubleValue()); + else if (property.getType().equals(float.class)) + property.set(domain, key.floatValue()); + else if (property.getType().equals(short.class)) + property.set(domain, key.shortValue()); + else if (property.getType().equals(byte.class)) + property.set(domain, key.byteValue()); + else if (property.getType().equals(boolean.class)) + property.set(domain, key.byteValue()); + else if (property.getType().equals(Integer.class)) + property.set(domain, key.intValue()); + else if (property.getType().equals(Long.class)) + property.set(domain, key.longValue()); + else if (property.getType().equals(Double.class)) + property.set(domain, key.doubleValue()); + else if (property.getType().equals(Float.class)) + property.set(domain, key.floatValue()); + else if (property.getType().equals(Short.class)) + property.set(domain, key.shortValue()); + else if (property.getType().equals(Byte.class)) + property.set(domain, key.byteValue()); + else if (property.getType().equals(Boolean.class)) + property.set(domain, key.byteValue()); + else if (property.getType().equals(String.class)) + property.set(domain, key.toString()); + else if (property.getType().equals(Object.class)) + property.set(domain, key); + } catch (Exception e) { + log.error("setIdValue error", e); + } + } + + + public String getName() { + return property.getName(); + } + + public Object get(Object domain) { + try { + return property.get(domain); + } catch (Exception e) { + log.error("get error", e); + return null; + } + } + + public String getJdbcType(){ + if (property.getType().equals(int.class)) + return "INT"; + else if (property.getType().equals(long.class)) + return "BIGINT"; + else if (property.getType().equals(double.class)) + return "DOUBLE"; + else if (property.getType().equals(float.class)) + return "FLOAT"; + else if (property.getType().equals(short.class)) + return "SMALLINT"; + else if (property.getType().equals(byte.class)) + return "TINYINT"; + else if (property.getType().equals(boolean.class)) + return "BOOLEAN"; + else if (property.getType().equals(Integer.class)) + return "INT"; + else if (property.getType().equals(Long.class)) + return "BIGINT"; + else if (property.getType().equals(Double.class)) + return "DOUBLE"; + else if (property.getType().equals(Float.class)) + return "FLOAT"; + else if (property.getType().equals(Short.class)) + return "SMALLINT"; + else if (property.getType().equals(Byte.class)) + return "TINYINT"; + else if (property.getType().equals(Boolean.class)) + return "BOOLEAN"; + else if (property.getType().equals(String.class)) + return "VARCHAR(255)"; + else if (property.getType().equals(Object.class)) + return "VARCHAR(255)"; + else + throw new RuntimeException("not support type"); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java new file mode 100644 index 00000000..5fa7ad62 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java @@ -0,0 +1,35 @@ +package com.codingapi.springboot.persistence.schema; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +public abstract class SaveSchema { + + protected final SchemaProperty property; + + public SaveSchema(Schema schema) { + this.property = schema.getSchemaProperty(); + } + + public String saveSchema() { + return saveSchema(true); + } + + public abstract String saveSchema(boolean hasId); + + + public Object[] getSaveValues(Object object, boolean hasId) { + List values = new ArrayList<>(); + for (Property property : property.getProperties(hasId)) { + values.add(property.get(object)); + } + return values.toArray(); + } + + public Object[] getSaveValues(Object object) { + return getSaveValues(object, true); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java new file mode 100644 index 00000000..0fb792f8 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java @@ -0,0 +1,33 @@ +package com.codingapi.springboot.persistence.schema; + + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Getter +@Slf4j +public abstract class Schema { + + private final Class domainClass; + @Getter + private final SchemaProperty schemaProperty; + + public Schema(Class domainClass) { + log.info("Schema init:{}", domainClass); + this.domainClass = domainClass; + this.schemaProperty = new SchemaProperty(domainClass); + } + + + public abstract BuildSchema buildSchema(); + + public abstract SaveSchema insertSchema(); + + public abstract SearchSchema getById(); + + public boolean supports(Class domainClass) { + return this.domainClass.equals(domainClass); + } + + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java new file mode 100644 index 00000000..0c5db4ed --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java @@ -0,0 +1,7 @@ +package com.codingapi.springboot.persistence.schema; + +public interface SchemaExecutor { + + void create(Schema schema); + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java new file mode 100644 index 00000000..d959ba34 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java @@ -0,0 +1,6 @@ +package com.codingapi.springboot.persistence.schema; + +public interface SchemaFactory { + + Schema getSchema(Class domainClass); +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java new file mode 100644 index 00000000..84e9a1dd --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java @@ -0,0 +1,49 @@ +package com.codingapi.springboot.persistence.schema; + +import lombok.Getter; +import org.yaml.snakeyaml.introspector.PropertyUtils; + +import java.util.List; +import java.util.stream.Collectors; + + +public class SchemaProperty { + + private final List properties; + @Getter + private final String schemaName; + @Getter + private final Property idProperty; + + public SchemaProperty(Class domainClazz) { + PropertyUtils propertyUtils = new PropertyUtils(); + propertyUtils.setSkipMissingProperties(true); + this.properties = propertyUtils.getProperties(domainClazz).stream() + .map(Property::new).collect(Collectors.toList()); + this.idProperty = new Property(propertyUtils.getProperty(domainClazz, "id")); + this.schemaName = domainClazz.getSimpleName(); + } + + + public List getProperties(boolean hasId) { + if(hasId){ + return properties; + }else{ + return properties.stream() + .filter(property -> !property.getName().equals("id")) + .collect(Collectors.toList()); + } + } + + public List getProperties() { + return getProperties(true); + } + + public boolean hasIdValue(Object domain) { + return idProperty.hasIdValue(domain); + } + + public void setIdValue(Object domain, Number key) { + idProperty.setIdValue(domain, key); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java new file mode 100644 index 00000000..f9a0b92e --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java @@ -0,0 +1,20 @@ +package com.codingapi.springboot.persistence.schema; + +import lombok.Getter; + +@Getter +public abstract class SearchSchema { + + protected final SchemaProperty property; + + public SearchSchema(Schema schema) { + this.property = schema.getSchemaProperty(); + } + + public abstract String getById(); + + public Object getByIdValue(Object domain) { + return property.getIdProperty().get(domain); + } + +} diff --git a/springboot-starter-persistence/src/main/resources/META-INF/spring.factories b/springboot-starter-persistence/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..7f31636a --- /dev/null +++ b/springboot-starter-persistence/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.codingapi.springboot.persistence.AutoConfiguration,\ +com.codingapi.springboot.persistence.jdbc.JdbcAutoConfiguration \ No newline at end of file diff --git a/springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..bd5ab7b5 --- /dev/null +++ b/springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.codingapi.springboot.persistence.AutoConfiguration +com.codingapi.springboot.persistence.jdbc.JdbcAutoConfiguration \ No newline at end of file diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java b/springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java new file mode 100644 index 00000000..339150f0 --- /dev/null +++ b/springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java @@ -0,0 +1,12 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PersistenceApplication { + + public static void main(String[] args) { + SpringApplication.run(PersistenceApplication.class, args); + } +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java b/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java new file mode 100644 index 00000000..d94fd8ed --- /dev/null +++ b/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java @@ -0,0 +1,12 @@ +package com.example.demo.domain; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class Demo { + + private int id; + private String name; +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java new file mode 100644 index 00000000..77b6f2a7 --- /dev/null +++ b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java @@ -0,0 +1,15 @@ +package com.example.demo.register; + +import com.example.demo.domain.Demo; +import com.codingapi.springboot.persistence.register.DomainClassRegister; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; + +@Component +public class DomainRegister implements InitializingBean { + + @Override + public void afterPropertiesSet() throws Exception { + DomainClassRegister.INSTANCE.register(Demo.class); + } +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java new file mode 100644 index 00000000..a2a717a0 --- /dev/null +++ b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java @@ -0,0 +1,24 @@ +package com.example.demo.repository; + +import com.codingapi.springboot.persistence.DomainPersistence; +import com.example.demo.domain.Demo; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +@Slf4j +@Repository +@AllArgsConstructor +public class DemoRepository { + + private final DomainPersistence domainPersistence; + + public void save(Demo demo) { + domainPersistence.save(demo); + } + + public Demo get(int id) { + return domainPersistence.get(Demo.class, id); + } + +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java new file mode 100644 index 00000000..c9d64bca --- /dev/null +++ b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java @@ -0,0 +1,41 @@ +package com.example.demo.repository; + +import com.example.demo.domain.Demo; +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 DemoRepositoryTests { + + + @Autowired + private DemoRepository demoRepository; + + @Test + void save1() { + Demo demo = new Demo(); + demo.setName("demo"); + demoRepository.save(demo); + System.out.println(demo.getId()); + } + + @Test + void save2() { + Demo demo = new Demo(); + demo.setName("demo"); + demo.setId(100); + demoRepository.save(demo); + System.out.println(demo.getId()); + } + + + @Test + void get() { + Demo demo = demoRepository.get(100); + log.info("demo: {}", demo); + } + +} diff --git a/springboot-starter-persistence/src/test/resources/application.properties b/springboot-starter-persistence/src/test/resources/application.properties new file mode 100644 index 00000000..8a3b6d8a --- /dev/null +++ b/springboot-starter-persistence/src/test/resources/application.properties @@ -0,0 +1 @@ +codingapi.id.generator.jdbc-url=jdbc:h2:file:./test.db \ No newline at end of file From db415277fd9595ea6d3f0128b1513ac0c529408e Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:16:48 +0800 Subject: [PATCH 02/29] add persistence module --- springboot-starter-persistence/pom.xml | 4 ++-- .../springboot/persistence/AutoConfiguration.java | 2 +- .../persistence/jdbc/JdbcAutoConfiguration.java | 5 ++++- .../jdbc/{ => executor}/JdbcSchemaExecutor.java | 4 ++-- .../jdbc/{ => impl}/JdbcDomainPersistence.java | 2 +- .../persistence/jdbc/{ => impl}/JdbcSchemaFactory.java | 2 +- .../persistence/jdbc/schema/JdbcBuildSchema.java | 2 +- .../persistence/jdbc/schema/JdbcSaveSchema.java | 2 +- .../persistence/{schema => property}/Property.java | 2 +- .../persistence/{schema => property}/SchemaProperty.java | 2 +- .../springboot/persistence/scanner/SchemaScanner.java | 2 +- .../springboot/persistence/schema/BuildSchema.java | 2 ++ .../springboot/persistence/schema/SaveSchema.java | 2 ++ .../codingapi/springboot/persistence/schema/Schema.java | 1 + .../springboot/persistence/schema/SchemaExecutor.java | 7 ------- .../springboot/persistence/schema/SearchSchema.java | 1 + .../persistence/schema/executor/SchemaExecutor.java | 9 +++++++++ .../src/test/java/com/example/demo/domain/Demo.java | 2 ++ .../src/test/resources/application.properties | 9 ++++++++- 19 files changed, 41 insertions(+), 21 deletions(-) rename springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/{ => executor}/JdbcSchemaExecutor.java (77%) rename springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/{ => impl}/JdbcDomainPersistence.java (97%) rename springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/{ => impl}/JdbcSchemaFactory.java (86%) rename springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/{schema => property}/Property.java (99%) rename springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/{schema => property}/SchemaProperty.java (96%) delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java diff --git a/springboot-starter-persistence/pom.xml b/springboot-starter-persistence/pom.xml index d4b08d2d..fcead065 100644 --- a/springboot-starter-persistence/pom.xml +++ b/springboot-starter-persistence/pom.xml @@ -24,8 +24,8 @@ - com.h2database - h2 + com.mysql + mysql-connector-j test diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java index 45f492b6..2c472586 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java @@ -1,7 +1,7 @@ package com.codingapi.springboot.persistence; import com.codingapi.springboot.persistence.scanner.SchemaScanner; -import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; import com.codingapi.springboot.persistence.schema.SchemaFactory; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.annotation.Bean; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java index 1d5f50c4..f9ab2997 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java @@ -1,7 +1,10 @@ package com.codingapi.springboot.persistence.jdbc; import com.codingapi.springboot.persistence.DomainPersistence; -import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.jdbc.executor.JdbcSchemaExecutor; +import com.codingapi.springboot.persistence.jdbc.impl.JdbcDomainPersistence; +import com.codingapi.springboot.persistence.jdbc.impl.JdbcSchemaFactory; +import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; import com.codingapi.springboot.persistence.schema.SchemaFactory; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java similarity index 77% rename from springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java rename to springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java index fe004d91..ee1c82c0 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaExecutor.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java @@ -1,7 +1,7 @@ -package com.codingapi.springboot.persistence.jdbc; +package com.codingapi.springboot.persistence.jdbc.executor; import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; import lombok.AllArgsConstructor; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java similarity index 97% rename from springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java rename to springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java index d64c9443..68f593c1 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcDomainPersistence.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.persistence.jdbc; +package com.codingapi.springboot.persistence.jdbc.impl; import com.codingapi.springboot.persistence.DomainPersistence; import com.codingapi.springboot.persistence.scanner.SchemaContext; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java similarity index 86% rename from springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java rename to springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java index 1cbfb250..77dbf809 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcSchemaFactory.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.persistence.jdbc; +package com.codingapi.springboot.persistence.jdbc.impl; import com.codingapi.springboot.persistence.jdbc.schema.JdbcSchema; import com.codingapi.springboot.persistence.schema.Schema; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java index 55fd4ac7..862e883b 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java @@ -1,7 +1,7 @@ package com.codingapi.springboot.persistence.jdbc.schema; import com.codingapi.springboot.persistence.schema.BuildSchema; -import com.codingapi.springboot.persistence.schema.Property; +import com.codingapi.springboot.persistence.property.Property; import com.codingapi.springboot.persistence.schema.Schema; import java.util.List; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java index 612e3166..0387afb8 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java @@ -1,6 +1,6 @@ package com.codingapi.springboot.persistence.jdbc.schema; -import com.codingapi.springboot.persistence.schema.Property; +import com.codingapi.springboot.persistence.property.Property; import com.codingapi.springboot.persistence.schema.SaveSchema; import com.codingapi.springboot.persistence.schema.Schema; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/Property.java similarity index 99% rename from springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java rename to springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/Property.java index 14ff61c2..37378d73 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Property.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/Property.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.persistence.schema; +package com.codingapi.springboot.persistence.property; import lombok.extern.slf4j.Slf4j; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java similarity index 96% rename from springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java rename to springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java index 84e9a1dd..74490577 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaProperty.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.persistence.schema; +package com.codingapi.springboot.persistence.property; import lombok.Getter; import org.yaml.snakeyaml.introspector.PropertyUtils; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java index a8e2dd68..5b4f4b65 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java @@ -2,7 +2,7 @@ import com.codingapi.springboot.persistence.register.DomainClassRegister; import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.SchemaExecutor; +import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; import com.codingapi.springboot.persistence.schema.SchemaFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java index 09fb8376..51981f8d 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java @@ -1,5 +1,7 @@ package com.codingapi.springboot.persistence.schema; +import com.codingapi.springboot.persistence.property.SchemaProperty; + public abstract class BuildSchema { public abstract String createSchema(); diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java index 5fa7ad62..f9b256ca 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java @@ -1,5 +1,7 @@ package com.codingapi.springboot.persistence.schema; +import com.codingapi.springboot.persistence.property.Property; +import com.codingapi.springboot.persistence.property.SchemaProperty; import lombok.Getter; import java.util.ArrayList; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java index 0fb792f8..374196d3 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java @@ -1,6 +1,7 @@ package com.codingapi.springboot.persistence.schema; +import com.codingapi.springboot.persistence.property.SchemaProperty; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java deleted file mode 100644 index 0c5db4ed..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaExecutor.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -public interface SchemaExecutor { - - void create(Schema schema); - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java index f9a0b92e..5e65208e 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.persistence.schema; +import com.codingapi.springboot.persistence.property.SchemaProperty; import lombok.Getter; @Getter diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java new file mode 100644 index 00000000..23a6e826 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java @@ -0,0 +1,9 @@ +package com.codingapi.springboot.persistence.schema.executor; + +import com.codingapi.springboot.persistence.schema.Schema; + +public interface SchemaExecutor { + + void create(Schema schema); + +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java b/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java index d94fd8ed..f8ab3f23 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java @@ -2,9 +2,11 @@ import lombok.Getter; import lombok.Setter; +import lombok.ToString; @Setter @Getter +@ToString public class Demo { private int id; diff --git a/springboot-starter-persistence/src/test/resources/application.properties b/springboot-starter-persistence/src/test/resources/application.properties index 8a3b6d8a..9669e136 100644 --- a/springboot-starter-persistence/src/test/resources/application.properties +++ b/springboot-starter-persistence/src/test/resources/application.properties @@ -1 +1,8 @@ -codingapi.id.generator.jdbc-url=jdbc:h2:file:./test.db \ No newline at end of file +spring.datasource.url=jdbc:mysql://localhost:3306/demo?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +spring.datasource.username=root +spring.datasource.password=12345678 +spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver + +spring.datasource.hikari.maximum-pool-size=1 +spring.datasource.hikari.minimum-idle=1 +spring.datasource.hikari.connection-timeout=3000 From 5c41144e5d19b4b282f2da8e02bf0c260e55c4a3 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:32:08 +0800 Subject: [PATCH 03/29] support delete & update --- .../persistence/DomainPersistence.java | 3 ++ .../jdbc/impl/JdbcDomainPersistence.java | 19 ++++++++++++ .../jdbc/schema/JdbcBuildSchema.java | 10 +++---- .../jdbc/schema/JdbcDeleteSchema.java | 16 ++++++++++ .../jdbc/schema/JdbcSaveSchema.java | 8 ++--- .../persistence/jdbc/schema/JdbcSchema.java | 15 +++++++--- .../jdbc/schema/JdbcUpdateSchema.java | 25 ++++++++++++++++ .../{Property.java => BeanProperty.java} | 7 +++-- .../persistence/property/SchemaProperty.java | 18 ++++++------ .../persistence/schema/DeleteSchema.java | 14 +++++++++ .../persistence/schema/SaveSchema.java | 6 ++-- .../springboot/persistence/schema/Schema.java | 4 +++ .../persistence/schema/SearchSchema.java | 2 +- .../persistence/schema/UpdateSchema.java | 29 +++++++++++++++++++ .../demo/repository/DemoRepository.java | 8 +++++ .../demo/repository/DemoRepositoryTests.java | 13 +++++++++ 16 files changed, 168 insertions(+), 29 deletions(-) create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java rename springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/{Property.java => BeanProperty.java} (97%) create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java index 1fa6c8b0..cd786336 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java @@ -6,4 +6,7 @@ public interface DomainPersistence { T get(Class domainClass, Object id); + void delete(Class domainClass,Object id); + + void update(Object domain); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java index 68f593c1..0d2b1dfb 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java @@ -5,6 +5,7 @@ import com.codingapi.springboot.persistence.schema.SaveSchema; import com.codingapi.springboot.persistence.schema.Schema; import com.codingapi.springboot.persistence.schema.SearchSchema; +import com.codingapi.springboot.persistence.schema.UpdateSchema; import lombok.AllArgsConstructor; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.BeanPropertyRowMapper; @@ -57,4 +58,22 @@ public T get(Class domainClass, Object id) { } return null; } + + @Override + public void delete(Class domainClazz,Object id) { + Schema schema = SchemaContext.getINSTANCE().getSchema(domainClazz); + if (schema != null) { + String sql = schema.deleteSchema().deleteSchema(); + jdbcTemplate.update(sql, id); + } + } + + @Override + public void update(Object domain) { + Schema schema = SchemaContext.getINSTANCE().getSchema(domain.getClass()); + if (schema != null) { + UpdateSchema updateSchema = schema.updateSchema(); + jdbcTemplate.update(updateSchema.updateSchema(), updateSchema.getUpdateValues(domain)); + } + } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java index 862e883b..3947b93d 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java @@ -1,7 +1,7 @@ package com.codingapi.springboot.persistence.jdbc.schema; import com.codingapi.springboot.persistence.schema.BuildSchema; -import com.codingapi.springboot.persistence.property.Property; +import com.codingapi.springboot.persistence.property.BeanProperty; import com.codingapi.springboot.persistence.schema.Schema; import java.util.List; @@ -19,12 +19,12 @@ public String createSchema() { sql.append(property.getSchemaName()); sql.append(" ("); sql.append("id INT PRIMARY KEY AUTO_INCREMENT,"); - List properties = property.getProperties(false); + List properties = property.getProperties(false); for (int i = 0; i < properties.size(); i++) { - Property property = properties.get(i); - sql.append(property.getName()); + BeanProperty beanProperty = properties.get(i); + sql.append(beanProperty.getName()); sql.append(" "); - sql.append(property.getJdbcType()); + sql.append(beanProperty.getJdbcType()); if (i != properties.size() - 1) { sql.append(", "); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java new file mode 100644 index 00000000..de686133 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java @@ -0,0 +1,16 @@ +package com.codingapi.springboot.persistence.jdbc.schema; + +import com.codingapi.springboot.persistence.schema.DeleteSchema; +import com.codingapi.springboot.persistence.schema.Schema; + +public class JdbcDeleteSchema extends DeleteSchema { + + public JdbcDeleteSchema(Schema schema) { + super(schema); + } + + @Override + public String deleteSchema() { + return "DELETE FROM " + property.getSchemaName() + " WHERE id = ?"; + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java index 0387afb8..45c0c7d4 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java @@ -1,6 +1,6 @@ package com.codingapi.springboot.persistence.jdbc.schema; -import com.codingapi.springboot.persistence.property.Property; +import com.codingapi.springboot.persistence.property.BeanProperty; import com.codingapi.springboot.persistence.schema.SaveSchema; import com.codingapi.springboot.persistence.schema.Schema; @@ -16,13 +16,13 @@ public String saveSchema(boolean hasId) { sql.append("INSERT INTO "); sql.append(property.getSchemaName()); sql.append(" ("); - for (Property property : property.getProperties(hasId)) { - sql.append(property.getName()); + for (BeanProperty beanProperty : property.getProperties(hasId)) { + sql.append(beanProperty.getName()); sql.append(", "); } sql.delete(sql.length() - 2, sql.length()); sql.append(") VALUES ("); - for (Property property : property.getProperties(hasId)) { + for (BeanProperty beanProperty : property.getProperties(hasId)) { sql.append("?, "); } sql.delete(sql.length() - 2, sql.length()); diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java index c5905a70..786a9858 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java @@ -1,9 +1,6 @@ package com.codingapi.springboot.persistence.jdbc.schema; -import com.codingapi.springboot.persistence.schema.BuildSchema; -import com.codingapi.springboot.persistence.schema.SaveSchema; -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.SearchSchema; +import com.codingapi.springboot.persistence.schema.*; public class JdbcSchema extends Schema { @@ -25,4 +22,14 @@ public SaveSchema insertSchema() { public SearchSchema getById() { return new JdbcSearchSchema(this); } + + @Override + public DeleteSchema deleteSchema() { + return new JdbcDeleteSchema(this); + } + + @Override + public UpdateSchema updateSchema() { + return new JdbcUpdateSchema(this); + } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java new file mode 100644 index 00000000..6cf07d50 --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java @@ -0,0 +1,25 @@ +package com.codingapi.springboot.persistence.jdbc.schema; + +import com.codingapi.springboot.persistence.property.BeanProperty; +import com.codingapi.springboot.persistence.schema.Schema; +import com.codingapi.springboot.persistence.schema.UpdateSchema; + +public class JdbcUpdateSchema extends UpdateSchema { + + public JdbcUpdateSchema(Schema schema) { + super(schema); + } + + @Override + public String updateSchema() { + StringBuilder sql = new StringBuilder(); + sql.append("UPDATE ").append(property.getSchemaName()).append(" SET "); + for (BeanProperty property : property.getProperties(false)) { + sql.append(property.getName()).append(" = ?, "); + } + sql.delete(sql.length() - 2, sql.length()); + sql.append(" WHERE id = ?"); + return sql.toString(); + } + +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/Property.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java similarity index 97% rename from springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/Property.java rename to springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java index 37378d73..79bb3b2c 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/Property.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java @@ -1,13 +1,14 @@ package com.codingapi.springboot.persistence.property; import lombok.extern.slf4j.Slf4j; +import org.yaml.snakeyaml.introspector.Property; @Slf4j -public class Property { +public class BeanProperty { - private final org.yaml.snakeyaml.introspector.Property property; + private final Property property; - public Property(org.yaml.snakeyaml.introspector.Property property) { + public BeanProperty(Property property) { this.property = property; } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java index 74490577..d1dc2946 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java @@ -9,41 +9,41 @@ public class SchemaProperty { - private final List properties; + private final List properties; @Getter private final String schemaName; @Getter - private final Property idProperty; + private final BeanProperty idBeanProperty; public SchemaProperty(Class domainClazz) { PropertyUtils propertyUtils = new PropertyUtils(); propertyUtils.setSkipMissingProperties(true); this.properties = propertyUtils.getProperties(domainClazz).stream() - .map(Property::new).collect(Collectors.toList()); - this.idProperty = new Property(propertyUtils.getProperty(domainClazz, "id")); + .map(BeanProperty::new).collect(Collectors.toList()); + this.idBeanProperty = new BeanProperty(propertyUtils.getProperty(domainClazz, "id")); this.schemaName = domainClazz.getSimpleName(); } - public List getProperties(boolean hasId) { + public List getProperties(boolean hasId) { if(hasId){ return properties; }else{ return properties.stream() - .filter(property -> !property.getName().equals("id")) + .filter(beanProperty -> !beanProperty.getName().equals("id")) .collect(Collectors.toList()); } } - public List getProperties() { + public List getProperties() { return getProperties(true); } public boolean hasIdValue(Object domain) { - return idProperty.hasIdValue(domain); + return idBeanProperty.hasIdValue(domain); } public void setIdValue(Object domain, Number key) { - idProperty.setIdValue(domain, key); + idBeanProperty.setIdValue(domain, key); } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java new file mode 100644 index 00000000..8712c0ee --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java @@ -0,0 +1,14 @@ +package com.codingapi.springboot.persistence.schema; + +import com.codingapi.springboot.persistence.property.SchemaProperty; + +public abstract class DeleteSchema { + + public abstract String deleteSchema(); + + protected final SchemaProperty property; + + public DeleteSchema(Schema schema) { + this.property = schema.getSchemaProperty(); + } +} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java index f9b256ca..7e07f1a8 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java @@ -1,6 +1,6 @@ package com.codingapi.springboot.persistence.schema; -import com.codingapi.springboot.persistence.property.Property; +import com.codingapi.springboot.persistence.property.BeanProperty; import com.codingapi.springboot.persistence.property.SchemaProperty; import lombok.Getter; @@ -25,8 +25,8 @@ public String saveSchema() { public Object[] getSaveValues(Object object, boolean hasId) { List values = new ArrayList<>(); - for (Property property : property.getProperties(hasId)) { - values.add(property.get(object)); + for (BeanProperty beanProperty : property.getProperties(hasId)) { + values.add(beanProperty.get(object)); } return values.toArray(); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java index 374196d3..fb23b318 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java @@ -26,6 +26,10 @@ public Schema(Class domainClass) { public abstract SearchSchema getById(); + public abstract DeleteSchema deleteSchema(); + + public abstract UpdateSchema updateSchema(); + public boolean supports(Class domainClass) { return this.domainClass.equals(domainClass); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java index 5e65208e..70335712 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java @@ -15,7 +15,7 @@ public SearchSchema(Schema schema) { public abstract String getById(); public Object getByIdValue(Object domain) { - return property.getIdProperty().get(domain); + return property.getIdBeanProperty().get(domain); } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java new file mode 100644 index 00000000..db9f1a6e --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java @@ -0,0 +1,29 @@ +package com.codingapi.springboot.persistence.schema; + +import com.codingapi.springboot.persistence.property.BeanProperty; +import com.codingapi.springboot.persistence.property.SchemaProperty; + +public abstract class UpdateSchema { + + public abstract String updateSchema(); + + protected final SchemaProperty property; + + public UpdateSchema(Schema schema) { + this.property = schema.getSchemaProperty(); + } + + public Object[] getUpdateValues(Object object) { + BeanProperty idBeanProperty = property.getIdBeanProperty(); + Object[] values = new Object[property.getProperties(true).size()]; + int i = 0; + for (BeanProperty beanProperty : property.getProperties(false)) { + values[i] = beanProperty.get(object); + i++; + } + values[i] = idBeanProperty.get(object); + return values; + } + + +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java index a2a717a0..77f61b27 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java @@ -21,4 +21,12 @@ public Demo get(int id) { return domainPersistence.get(Demo.class, id); } + public void delete(int id) { + domainPersistence.delete(Demo.class,id); + } + + public void update(Demo demo) { + domainPersistence.update(demo); + } + } diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java index c9d64bca..99a5b80b 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java @@ -38,4 +38,17 @@ void get() { log.info("demo: {}", demo); } + @Test + void delete() { + demoRepository.delete(100); + } + + + @Test + void update() { + Demo demo = new Demo(); + demo.setId(100); + demo.setName("123456"); + demoRepository.update(demo); + } } From 46976f95e1ed2e71ec5158463e484054e5aefeca Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:40:07 +0800 Subject: [PATCH 04/29] support find schema --- .../springboot/persistence/DomainPersistence.java | 4 ++++ .../jdbc/impl/JdbcDomainPersistence.java | 13 ++++++++++++- .../com/example/demo/repository/DemoRepository.java | 8 +++++++- .../demo/repository/DemoRepositoryTests.java | 8 ++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java index cd786336..d2ad6bac 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java @@ -1,5 +1,7 @@ package com.codingapi.springboot.persistence; +import java.util.List; + public interface DomainPersistence { void save(Object domain); @@ -9,4 +11,6 @@ public interface DomainPersistence { void delete(Class domainClass,Object id); void update(Object domain); + + List find(Class domainClass, String schema, Object... fields); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java index 0d2b1dfb..8b16f632 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java @@ -15,6 +15,7 @@ import java.sql.PreparedStatement; import java.sql.Statement; +import java.util.List; @AllArgsConstructor public class JdbcDomainPersistence implements DomainPersistence { @@ -60,7 +61,7 @@ public T get(Class domainClass, Object id) { } @Override - public void delete(Class domainClazz,Object id) { + public void delete(Class domainClazz, Object id) { Schema schema = SchemaContext.getINSTANCE().getSchema(domainClazz); if (schema != null) { String sql = schema.deleteSchema().deleteSchema(); @@ -76,4 +77,14 @@ public void update(Object domain) { jdbcTemplate.update(updateSchema.updateSchema(), updateSchema.getUpdateValues(domain)); } } + + + @Override + public List find(Class domainClass, String sql, Object... fields) { + Schema schema = SchemaContext.getINSTANCE().getSchema(domainClass); + if (schema != null) { + return jdbcTemplate.query(sql, fields, new BeanPropertyRowMapper<>(domainClass)); + } + return null; + } } diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java index 77f61b27..0051e7a3 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java @@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.util.List; + @Slf4j @Repository @AllArgsConstructor @@ -22,11 +24,15 @@ public Demo get(int id) { } public void delete(int id) { - domainPersistence.delete(Demo.class,id); + domainPersistence.delete(Demo.class, id); } public void update(Demo demo) { domainPersistence.update(demo); } + public List findByName(String name) { + return domainPersistence.find(Demo.class, "select * from demo where name = ?", name); + } + } diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java index 99a5b80b..abf45a74 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java @@ -6,6 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.util.List; + @Slf4j @SpringBootTest public class DemoRepositoryTests { @@ -51,4 +53,10 @@ void update() { demo.setName("123456"); demoRepository.update(demo); } + + @Test + void getByName() { + List list = demoRepository.findByName("demo"); + log.info("list: {}", list); + } } From 28d45318ce39684e69007fed968efd2c5fd5ec02 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:49:08 +0800 Subject: [PATCH 05/29] fix schema --- .../persistence/AutoConfiguration.java | 2 +- .../jdbc/JdbcAutoConfiguration.java | 2 +- .../jdbc/executor/JdbcSchemaExecutor.java | 2 +- .../jdbc/impl/JdbcDomainPersistence.java | 24 +++++++++---------- .../jdbc/impl/JdbcSchemaFactory.java | 2 +- .../jdbc/schema/JdbcBuildSchema.java | 2 +- .../jdbc/schema/JdbcDeleteSchema.java | 2 +- .../jdbc/schema/JdbcSaveSchema.java | 2 +- .../persistence/jdbc/schema/JdbcSchema.java | 4 ++-- .../jdbc/schema/JdbcSearchSchema.java | 2 +- .../jdbc/schema/JdbcUpdateSchema.java | 2 +- .../register/DomainClassRegister.java | 6 ++++- .../persistence/scanner/SchemaContext.java | 7 ++++-- .../persistence/scanner/SchemaScanner.java | 6 ++--- .../persistence/schema/BuildSchema.java | 2 +- .../persistence/schema/DeleteSchema.java | 2 +- .../persistence/schema/SaveSchema.java | 6 ++--- .../springboot/persistence/schema/Schema.java | 9 ++----- .../persistence/schema/SchemaFactory.java | 6 ----- .../persistence/schema/SearchSchema.java | 2 +- .../persistence/schema/UpdateSchema.java | 2 +- .../schema/factory/SchemaFactory.java | 8 +++++++ .../example/demo/register/DomainRegister.java | 2 +- 23 files changed, 54 insertions(+), 50 deletions(-) delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java create mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java index 2c472586..2803a848 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java @@ -2,7 +2,7 @@ import com.codingapi.springboot.persistence.scanner.SchemaScanner; import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import com.codingapi.springboot.persistence.schema.SchemaFactory; +import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.annotation.Bean; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java index f9ab2997..74c386fc 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java @@ -5,7 +5,7 @@ import com.codingapi.springboot.persistence.jdbc.impl.JdbcDomainPersistence; import com.codingapi.springboot.persistence.jdbc.impl.JdbcSchemaFactory; import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import com.codingapi.springboot.persistence.schema.SchemaFactory; +import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java index ee1c82c0..8270eb9e 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java @@ -15,7 +15,7 @@ public class JdbcSchemaExecutor implements SchemaExecutor { @Override public void create(Schema schema) { - jdbcTemplate.execute(schema.buildSchema().createSchema()); + jdbcTemplate.execute(schema.buildSchema().schema()); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java index 8b16f632..c2dc5d6f 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java @@ -24,15 +24,15 @@ public class JdbcDomainPersistence implements DomainPersistence { @Override public void save(Object domain) { - Schema schema = SchemaContext.getINSTANCE().getSchema(domain.getClass()); + Schema schema = SchemaContext.getInstance().getSchema(domain.getClass()); if (schema != null) { - SaveSchema saveSchema = schema.insertSchema(); + SaveSchema saveSchema = schema.saveSchema(); if (schema.getSchemaProperty().hasIdValue(domain)) { - jdbcTemplate.update(saveSchema.saveSchema(), saveSchema.getSaveValues(domain)); + jdbcTemplate.update(saveSchema.schema(), saveSchema.getSaveValues(domain)); } else { KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update(con -> { - PreparedStatement ps = con.prepareStatement(saveSchema.saveSchema(false), Statement.RETURN_GENERATED_KEYS); + PreparedStatement ps = con.prepareStatement(saveSchema.schema(false), Statement.RETURN_GENERATED_KEYS); int index = 1; for (Object value : saveSchema.getSaveValues(domain, false)) { ps.setObject(index++, value); @@ -46,10 +46,10 @@ public void save(Object domain) { @Override public T get(Class domainClass, Object id) { - Schema schema = SchemaContext.getINSTANCE().getSchema(domainClass); + Schema schema = SchemaContext.getInstance().getSchema(domainClass); if (schema != null) { - SearchSchema searchSchema = schema.getById(); - String sql = searchSchema.getById(); + SearchSchema searchSchema = schema.searchSchema(); + String sql = searchSchema.schema(); try { return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(domainClass)); } catch (EmptyResultDataAccessException e) { @@ -62,26 +62,26 @@ public T get(Class domainClass, Object id) { @Override public void delete(Class domainClazz, Object id) { - Schema schema = SchemaContext.getINSTANCE().getSchema(domainClazz); + Schema schema = SchemaContext.getInstance().getSchema(domainClazz); if (schema != null) { - String sql = schema.deleteSchema().deleteSchema(); + String sql = schema.deleteSchema().schema(); jdbcTemplate.update(sql, id); } } @Override public void update(Object domain) { - Schema schema = SchemaContext.getINSTANCE().getSchema(domain.getClass()); + Schema schema = SchemaContext.getInstance().getSchema(domain.getClass()); if (schema != null) { UpdateSchema updateSchema = schema.updateSchema(); - jdbcTemplate.update(updateSchema.updateSchema(), updateSchema.getUpdateValues(domain)); + jdbcTemplate.update(updateSchema.schema(), updateSchema.getUpdateValues(domain)); } } @Override public List find(Class domainClass, String sql, Object... fields) { - Schema schema = SchemaContext.getINSTANCE().getSchema(domainClass); + Schema schema = SchemaContext.getInstance().getSchema(domainClass); if (schema != null) { return jdbcTemplate.query(sql, fields, new BeanPropertyRowMapper<>(domainClass)); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java index 77dbf809..415e96b6 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java @@ -2,7 +2,7 @@ import com.codingapi.springboot.persistence.jdbc.schema.JdbcSchema; import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.SchemaFactory; +import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; public class JdbcSchemaFactory implements SchemaFactory { diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java index 3947b93d..1303bd5a 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java @@ -13,7 +13,7 @@ public JdbcBuildSchema(Schema schema) { } @Override - public String createSchema() { + public String schema() { StringBuilder sql = new StringBuilder(); sql.append("CREATE TABLE IF NOT EXISTS "); sql.append(property.getSchemaName()); diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java index de686133..328ca97e 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java @@ -10,7 +10,7 @@ public JdbcDeleteSchema(Schema schema) { } @Override - public String deleteSchema() { + public String schema() { return "DELETE FROM " + property.getSchemaName() + " WHERE id = ?"; } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java index 45c0c7d4..59586d04 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java @@ -11,7 +11,7 @@ public JdbcSaveSchema(Schema schema) { } @Override - public String saveSchema(boolean hasId) { + public String schema(boolean hasId) { StringBuilder sql = new StringBuilder(); sql.append("INSERT INTO "); sql.append(property.getSchemaName()); diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java index 786a9858..fbe12dc9 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java @@ -14,12 +14,12 @@ public BuildSchema buildSchema() { } @Override - public SaveSchema insertSchema() { + public SaveSchema saveSchema() { return new JdbcSaveSchema(this); } @Override - public SearchSchema getById() { + public SearchSchema searchSchema() { return new JdbcSearchSchema(this); } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java index babbfcc4..3b75fa10 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java @@ -10,7 +10,7 @@ public JdbcSearchSchema(Schema schema) { } @Override - public String getById() { + public String schema() { return "SELECT * FROM " + property.getSchemaName() + " WHERE id = ?"; } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java index 6cf07d50..c6d012a6 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java @@ -11,7 +11,7 @@ public JdbcUpdateSchema(Schema schema) { } @Override - public String updateSchema() { + public String schema() { StringBuilder sql = new StringBuilder(); sql.append("UPDATE ").append(property.getSchemaName()).append(" SET "); for (BeanProperty property : property.getProperties(false)) { diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java index 88bf69a9..c2f4769e 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java @@ -10,7 +10,7 @@ public class DomainClassRegister { private final List> classes; - public final static DomainClassRegister INSTANCE = new DomainClassRegister(); + private final static DomainClassRegister INSTANCE = new DomainClassRegister(); private DomainClassRegister() { this.classes = new ArrayList<>(); @@ -26,4 +26,8 @@ public boolean supports(Class domainClass) { } + public static DomainClassRegister getInstance() { + return INSTANCE; + } + } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java index 17f579f6..865a9a2a 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java @@ -8,8 +8,7 @@ public class SchemaContext { - @Getter - public final static SchemaContext INSTANCE = new SchemaContext(); + private final static SchemaContext INSTANCE = new SchemaContext(); private final List schemas; @@ -27,4 +26,8 @@ public Schema getSchema(Class domainClass) { .findFirst() .orElseThrow(() -> new RuntimeException("schema not found")); } + + public static SchemaContext getInstance() { + return INSTANCE; + } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java index 5b4f4b65..f798a497 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java @@ -3,7 +3,7 @@ import com.codingapi.springboot.persistence.register.DomainClassRegister; import com.codingapi.springboot.persistence.schema.Schema; import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import com.codingapi.springboot.persistence.schema.SchemaFactory; +import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -24,10 +24,10 @@ public SchemaScanner(SchemaExecutor schemaExecutor, SchemaFactory schemaFactory) @Override public void run(ApplicationArguments args) throws Exception { - List> domainClasses = DomainClassRegister.INSTANCE.getClasses(); + List> domainClasses = DomainClassRegister.getInstance().getClasses(); for (Class domainClass : domainClasses) { Schema schema = schemaFactory.getSchema(domainClass); - SchemaContext.INSTANCE.register(schema); + SchemaContext.getInstance().register(schema); schemaExecutor.create(schema); } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java index 51981f8d..c93a6dc9 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java @@ -4,7 +4,7 @@ public abstract class BuildSchema { - public abstract String createSchema(); + public abstract String schema(); protected final SchemaProperty property; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java index 8712c0ee..3033e80b 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java @@ -4,7 +4,7 @@ public abstract class DeleteSchema { - public abstract String deleteSchema(); + public abstract String schema(); protected final SchemaProperty property; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java index 7e07f1a8..192581a5 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java @@ -16,11 +16,11 @@ public SaveSchema(Schema schema) { this.property = schema.getSchemaProperty(); } - public String saveSchema() { - return saveSchema(true); + public String schema() { + return schema(true); } - public abstract String saveSchema(boolean hasId); + public abstract String schema(boolean hasId); public Object[] getSaveValues(Object object, boolean hasId) { diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java index fb23b318..8cd848b1 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java @@ -22,17 +22,12 @@ public Schema(Class domainClass) { public abstract BuildSchema buildSchema(); - public abstract SaveSchema insertSchema(); + public abstract SaveSchema saveSchema(); - public abstract SearchSchema getById(); + public abstract SearchSchema searchSchema(); public abstract DeleteSchema deleteSchema(); public abstract UpdateSchema updateSchema(); - public boolean supports(Class domainClass) { - return this.domainClass.equals(domainClass); - } - - } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java deleted file mode 100644 index d959ba34..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SchemaFactory.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -public interface SchemaFactory { - - Schema getSchema(Class domainClass); -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java index 70335712..590eca08 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java @@ -12,7 +12,7 @@ public SearchSchema(Schema schema) { this.property = schema.getSchemaProperty(); } - public abstract String getById(); + public abstract String schema(); public Object getByIdValue(Object domain) { return property.getIdBeanProperty().get(domain); diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java index db9f1a6e..fbd61152 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java @@ -5,7 +5,7 @@ public abstract class UpdateSchema { - public abstract String updateSchema(); + public abstract String schema(); protected final SchemaProperty property; diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java new file mode 100644 index 00000000..768dd23b --- /dev/null +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java @@ -0,0 +1,8 @@ +package com.codingapi.springboot.persistence.schema.factory; + +import com.codingapi.springboot.persistence.schema.Schema; + +public interface SchemaFactory { + + Schema getSchema(Class domainClass); +} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java index 77b6f2a7..a9cea548 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java @@ -10,6 +10,6 @@ public class DomainRegister implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { - DomainClassRegister.INSTANCE.register(Demo.class); + DomainClassRegister.getInstance().register(Demo.class); } } From 23b1f44c38c1bb39a385d9ed59b09a4f5f69a179 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:56:41 +0800 Subject: [PATCH 06/29] fix schema --- .../persistence/property/SchemaProperty.java | 13 +++++++++++-- .../persistence/register/DomainClassRegister.java | 7 ++++++- .../springboot/persistence/schema/Schema.java | 6 ++++++ .../com/example/demo/register/DomainRegister.java | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java index d1dc2946..3ca946b0 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java @@ -26,9 +26,9 @@ public SchemaProperty(Class domainClazz) { public List getProperties(boolean hasId) { - if(hasId){ + if (hasId) { return properties; - }else{ + } else { return properties.stream() .filter(beanProperty -> !beanProperty.getName().equals("id")) .collect(Collectors.toList()); @@ -46,4 +46,13 @@ public boolean hasIdValue(Object domain) { public void setIdValue(Object domain, Number key) { idBeanProperty.setIdValue(domain, key); } + + public boolean hasIdProperty() { + for (BeanProperty property : properties) { + if (property.getName().equals("id")) { + return true; + } + } + return false; + } } diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java index c2f4769e..7ca5bc4d 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java @@ -16,8 +16,13 @@ private DomainClassRegister() { this.classes = new ArrayList<>(); } - public void register(Class domainClass) { + public DomainClassRegister register(Class domainClass) { this.classes.add(domainClass); + return this; + } + + public void register(Class... domainClasses) { + this.classes.addAll(List.of(domainClasses)); } public boolean supports(Class domainClass) { diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java index 8cd848b1..241e18bc 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java @@ -17,8 +17,14 @@ public Schema(Class domainClass) { log.info("Schema init:{}", domainClass); this.domainClass = domainClass; this.schemaProperty = new SchemaProperty(domainClass); + this.check(); } + public void check() { + if (!this.schemaProperty.hasIdProperty()) { + throw new RuntimeException("schema id property not found"); + } + } public abstract BuildSchema buildSchema(); diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java index a9cea548..cf1fcf16 100644 --- a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java +++ b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java @@ -1,7 +1,7 @@ package com.example.demo.register; -import com.example.demo.domain.Demo; import com.codingapi.springboot.persistence.register.DomainClassRegister; +import com.example.demo.domain.Demo; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; From 61243e56ebe05fa54d574706c7c16c1b1d9a1288 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 25 Dec 2023 09:57:08 +0800 Subject: [PATCH 07/29] fix schema --- .../com/codingapi/springboot/persistence/schema/Schema.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java index 241e18bc..690c319b 100644 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java +++ b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java @@ -17,10 +17,10 @@ public Schema(Class domainClass) { log.info("Schema init:{}", domainClass); this.domainClass = domainClass; this.schemaProperty = new SchemaProperty(domainClass); - this.check(); + this.verify(); } - public void check() { + public void verify() { if (!this.schemaProperty.hasIdProperty()) { throw new RuntimeException("schema id property not found"); } From 3870d57954647873d3dd757ce1ced8c8cc3c779f Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Sun, 31 Dec 2023 22:10:08 +0800 Subject: [PATCH 08/29] add DynamicMappingRegister --- pom.xml | 2 +- springboot-starter-data-fast/pom.xml | 8 +- .../fast/DataFastConfiguration.java | 10 ++ .../fast/mapping/DynamicMapping.java | 48 ++++++ .../fast/mapping/DynamicMappingRegister.java | 146 ++++++++++++++++++ springboot-starter-id-generator/pom.xml | 2 +- springboot-starter-persistence/pom.xml | 2 +- springboot-starter-security-jwt/pom.xml | 2 +- springboot-starter/pom.xml | 2 +- 9 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java diff --git a/pom.xml b/pom.xml index c71d1447..60364edb 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ com.codingapi.springboot springboot-parent - 3.1.6 + 3.1.7.dev https://github.com/codingapi/springboot-framewrok springboot-parent diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 87f02d2f..4bdb2f13 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.1.6 + 3.1.7.dev 4.0.0 @@ -39,6 +39,12 @@ test + + org.apache.commons + commons-text + 1.11.0 + + \ No newline at end of file diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java index 0dcf4268..f3af8ed0 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java @@ -1,7 +1,9 @@ package com.codingapi.springboot.fast; +import com.codingapi.springboot.fast.dynamic.DynamicQuery; import com.codingapi.springboot.fast.executor.JpaExecutor; import com.codingapi.springboot.fast.manager.EntityManagerInitializer; +import com.codingapi.springboot.fast.mapping.DynamicMappingRegister; import com.codingapi.springboot.fast.mapping.MvcEndpointMapping; import com.codingapi.springboot.fast.registrar.MvcMappingRegistrar; import org.springframework.aop.Advisor; @@ -9,6 +11,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @@ -26,6 +29,13 @@ public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handle return new MvcEndpointMapping(handlerMapping); } + @Bean + @ConditionalOnMissingBean + public DynamicMappingRegister dynamicMapping(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + return new DynamicMappingRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); + } + + @Bean(initMethod = "registerMvcMapping") @ConditionalOnMissingBean public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping, diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java new file mode 100644 index 00000000..6b53e3e4 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java @@ -0,0 +1,48 @@ +package com.codingapi.springboot.fast.mapping; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.web.bind.annotation.RequestMethod; + +@Getter +@Setter +@NoArgsConstructor +public class DynamicMapping { + + private String mapping; + private RequestMethod requestMethod; + private String sql; + private Class clazz; + private Object[] params; + private Type type; + + public DynamicMapping(Type type, String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { + this.type = type; + this.mapping = mapping; + this.requestMethod = requestMethod; + this.sql = sql; + this.clazz = clazz; + this.params = params; + } + + + public static DynamicMapping jdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { + return new DynamicMapping(Type.JDBC, mapping, requestMethod, sql, clazz, params); + } + + public static DynamicMapping jdbcMapMapping(String mapping, RequestMethod requestMethod, String sql, Object... params) { + return new DynamicMapping(Type.JDBC_MAP, mapping, requestMethod, sql, null, params); + } + + public static DynamicMapping hqlMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { + return new DynamicMapping(Type.HQL, mapping, requestMethod, sql, clazz, params); + } + + + + enum Type { + JDBC, HQL, JDBC_MAP + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java new file mode 100644 index 00000000..a4fd7c81 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java @@ -0,0 +1,146 @@ +package com.codingapi.springboot.fast.mapping; + +import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.apache.commons.text.CaseUtils; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.lang.reflect.Method; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@AllArgsConstructor +public class DynamicMappingRegister { + + private final MvcEndpointMapping mvcEndpointMapping; + + private final DynamicQuery dynamicQuery; + + private final JdbcTemplate jdbcTemplate; + + + private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql,Class clazz, Object ... params) { + Object handler = new JdbcMapping( jdbcTemplate,sql,clazz,params); + Method method = getJdbcMethod(); + mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); + } + + + private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql, Object ... params) { + Object handler = new JdbcMapMapping( jdbcTemplate,sql,params); + Method method = getJdbcMapMethod(); + mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); + } + + + private void addHqlMapping(String mapping, RequestMethod requestMethod,String hql,Class clazz, Object ... params) { + Object handler = new HqlMapping(dynamicQuery,hql,clazz,params); + Method method = getHqlMethod(); + mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); + } + + public void addMapping(DynamicMapping dynamicMapping) { + switch (dynamicMapping.getType()) { + case JDBC: + addJdbcMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()); + break; + case HQL: + addHqlMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()); + break; + case JDBC_MAP: + addJdbcMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getParams()); + break; + default: + throw new RuntimeException("not support type"); + } + } + + + + @SneakyThrows + private Method getJdbcMethod(){ + return JdbcMapping.class.getDeclaredMethod("execute"); + } + + @SneakyThrows + private Method getJdbcMapMethod(){ + return JdbcMapMapping.class.getDeclaredMethod("execute"); + } + + @SneakyThrows + private Method getHqlMethod(){ + return HqlMapping.class.getDeclaredMethod("execute"); + } + + + @AllArgsConstructor + public static class JdbcMapMapping{ + + private final JdbcTemplate jdbcTemplate; + private final String sql; + private final Object[] params; + + @ResponseBody + public List> execute() { + return jdbcTemplate.query(sql, params, new CamelCaseRowMapper()); + } + + private static class CamelCaseRowMapper implements RowMapper> { + + @Override + public Map mapRow(ResultSet rs, int rowNum) throws SQLException { + ResultSetMetaData metaData = rs.getMetaData(); + int columnCount = metaData.getColumnCount(); + Map map = new HashMap<>(columnCount); + for (int i = 1; i <= columnCount; i++) { + String columnName = metaData.getColumnLabel(i); + map.put(CaseUtils.toCamelCase(columnName,false), rs.getObject(i)); + } + return map; + } + } + } + + + @AllArgsConstructor + public static class JdbcMapping{ + + private final JdbcTemplate jdbcTemplate; + private final String sql; + private final Class clazz; + private final Object[] params; + + @ResponseBody + public List execute() { + return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz)); + } + + + + } + + + @AllArgsConstructor + public static class HqlMapping{ + + private final DynamicQuery dynamicQuery; + private final String hql; + private final Class clazz; + private final Object[] params; + + @ResponseBody + public List execute() { + return dynamicQuery.listQuery(clazz,hql, params); + } + } + +} diff --git a/springboot-starter-id-generator/pom.xml b/springboot-starter-id-generator/pom.xml index b789ff1c..db0a2416 100644 --- a/springboot-starter-id-generator/pom.xml +++ b/springboot-starter-id-generator/pom.xml @@ -5,7 +5,7 @@ springboot-parent com.codingapi.springboot - 3.1.6 + 3.1.7.dev 4.0.0 diff --git a/springboot-starter-persistence/pom.xml b/springboot-starter-persistence/pom.xml index fcead065..7cfb2ffe 100644 --- a/springboot-starter-persistence/pom.xml +++ b/springboot-starter-persistence/pom.xml @@ -5,7 +5,7 @@ springboot-parent com.codingapi.springboot - 3.1.6 + 3.1.7.dev 4.0.0 diff --git a/springboot-starter-security-jwt/pom.xml b/springboot-starter-security-jwt/pom.xml index beb2e118..0a512d60 100644 --- a/springboot-starter-security-jwt/pom.xml +++ b/springboot-starter-security-jwt/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 3.1.6 + 3.1.7.dev springboot-starter-security-jwt diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 770c0a62..339a20ff 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -5,7 +5,7 @@ com.codingapi.springboot springboot-parent - 3.1.6 + 3.1.7.dev springboot-starter From cee260ba203e17d58853c9e77bdace85b49a358d Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Sun, 31 Dec 2023 22:55:05 +0800 Subject: [PATCH 09/29] add DynamicScript --- pom.xml | 26 ++++++++++ springboot-starter-data-fast/pom.xml | 16 +++++- .../fast/DataFastConfiguration.java | 7 +++ .../fast/mapping/DynamicMappingRegister.java | 29 +++++++++++ .../fast/mapping/DynamicScriptRegister.java | 49 +++++++++++++++++++ .../fast/mapping/MvcEndpointMapping.java | 19 +++++++ .../springboot/fast/script/DynamicScript.java | 34 +++++++++++++ .../springboot/fast/script/ScriptContext.java | 29 +++++++++++ .../springboot/fast/script/ScriptRuntime.java | 18 +++++++ .../fast/script/ScriptRuntimeTest.java | 16 ++++++ 10 files changed, 242 insertions(+), 1 deletion(-) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java create mode 100644 springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java diff --git a/pom.xml b/pom.xml index 60364edb..5d588354 100644 --- a/pom.xml +++ b/pom.xml @@ -35,11 +35,13 @@ 0.12.3 2.15.0 1.8.1 + 1.11.0 0.10.2 0.9.16 1.70 1.2.0 2.2 + 4.0.15 @@ -157,6 +159,30 @@ ${commons-dbutils.version} + + org.apache.commons + commons-text + ${commons-text.version} + + + + org.apache.groovy + groovy + ${apache-groovy.version} + + + + org.apache.groovy + groovy-json + ${apache-groovy.version} + + + + org.apache.groovy + groovy-xml + ${apache-groovy.version} + + diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 4bdb2f13..6fe823d4 100644 --- a/springboot-starter-data-fast/pom.xml +++ b/springboot-starter-data-fast/pom.xml @@ -42,7 +42,21 @@ org.apache.commons commons-text - 1.11.0 + + + + org.apache.groovy + groovy + + + + org.apache.groovy + groovy-json + + + + org.apache.groovy + groovy-xml diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java index f3af8ed0..6f326174 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java @@ -4,6 +4,7 @@ import com.codingapi.springboot.fast.executor.JpaExecutor; import com.codingapi.springboot.fast.manager.EntityManagerInitializer; import com.codingapi.springboot.fast.mapping.DynamicMappingRegister; +import com.codingapi.springboot.fast.mapping.DynamicScriptRegister; import com.codingapi.springboot.fast.mapping.MvcEndpointMapping; import com.codingapi.springboot.fast.registrar.MvcMappingRegistrar; import org.springframework.aop.Advisor; @@ -35,6 +36,12 @@ public DynamicMappingRegister dynamicMapping(MvcEndpointMapping mvcEndpointMappi return new DynamicMappingRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); } + @Bean + @ConditionalOnMissingBean + public DynamicScriptRegister dynamicScriptRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + return new DynamicScriptRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); + } + @Bean(initMethod = "registerMvcMapping") @ConditionalOnMissingBean diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java index a4fd7c81..ca3cdac8 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java @@ -48,6 +48,27 @@ private void addHqlMapping(String mapping, RequestMethod requestMethod,String hq mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); } + /** + * test dynamic mapping + * @param dynamicMapping dynamic mapping + * @return result + */ + @ResponseBody + public Object test(DynamicMapping dynamicMapping) { + return switch (dynamicMapping.getType()) { + case JDBC -> + new JdbcMapping(jdbcTemplate, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); + case HQL -> + new HqlMapping(dynamicQuery, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); + case JDBC_MAP -> + new JdbcMapMapping(jdbcTemplate, dynamicMapping.getSql(), dynamicMapping.getParams()).execute(); + }; + } + + /** + * add dynamic mapping + * @param dynamicMapping dynamic mapping + */ public void addMapping(DynamicMapping dynamicMapping) { switch (dynamicMapping.getType()) { case JDBC: @@ -64,6 +85,14 @@ public void addMapping(DynamicMapping dynamicMapping) { } } + /** + * remove mapping + * @param mapping mapping + * @param requestMethod request method + */ + public void removeMapping(String mapping,RequestMethod requestMethod) { + mvcEndpointMapping.removeMapping(mapping,requestMethod); + } @SneakyThrows diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java new file mode 100644 index 00000000..e14e5036 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java @@ -0,0 +1,49 @@ +package com.codingapi.springboot.fast.mapping; + +import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.script.DynamicScript; +import com.codingapi.springboot.fast.script.ScriptContext; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +public class DynamicScriptRegister { + + private final MvcEndpointMapping mvcEndpointMapping; + + + public DynamicScriptRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + this.mvcEndpointMapping = mvcEndpointMapping; + ScriptContext.getInstance().init(dynamicQuery, jdbcTemplate); + } + + + /** + * test dynamic mapping + * @param dynamicScript dynamic mapping + **/ + public void addMapping(DynamicScript dynamicScript) { + mvcEndpointMapping.addMapping(dynamicScript.getMapping(), dynamicScript.getRequestMethod(), + dynamicScript, dynamicScript.getExecuteMethod()); + } + + /** + * remove mapping + * @param mapping mapping + * @param requestMethod requestMethod + */ + public void removeMapping(String mapping, RequestMethod requestMethod) { + mvcEndpointMapping.removeMapping(mapping, requestMethod); + } + + /** + * test dynamic mapping + * @param dynamicScript dynamic mapping + * @return result + */ + @ResponseBody + public Object test(DynamicScript dynamicScript) { + return dynamicScript.execute(); + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java index cf2eff3b..de8f7945 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java @@ -37,4 +37,23 @@ public void addMapping(String url, RequestMethod requestMethod, Object handler, handlerMapping.registerMapping(mappingInfo, handler, method); } + /** + * remove mvc mapping + * @param url mapping url + * @param requestMethod request method + */ + public void removeMapping(String url, RequestMethod requestMethod) { + RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration(); + options.setPatternParser(new PathPatternParser()); + + RequestMappingInfo mappingInfo = RequestMappingInfo + .paths(url) + .methods(requestMethod) + .produces(MediaType.APPLICATION_JSON_VALUE) + .options(options) + .build(); + + handlerMapping.unregisterMapping(mappingInfo); + } + } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java new file mode 100644 index 00000000..560ff2b2 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java @@ -0,0 +1,34 @@ +package com.codingapi.springboot.fast.script; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.lang.reflect.Method; + +@Setter +@Getter +public class DynamicScript { + + private String script; + private String mapping; + private RequestMethod requestMethod; + + + @ResponseBody + public Object execute() { + ScriptContext context = ScriptContext.getInstance(); + return ScriptRuntime.running(script,context); + } + + public Method getExecuteMethod() { + try { + return this.getClass().getDeclaredMethod("execute"); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java new file mode 100644 index 00000000..48992c0e --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java @@ -0,0 +1,29 @@ +package com.codingapi.springboot.fast.script; + +import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import lombok.Getter; +import org.springframework.jdbc.core.JdbcTemplate; + +public class ScriptContext { + + @Getter + private final static ScriptContext instance = new ScriptContext(); + + + private ScriptContext() { + + } + + + @Getter + private DynamicQuery dynamicQuery; + @Getter + private JdbcTemplate jdbcTemplate; + + + public void init(DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + this.dynamicQuery = dynamicQuery; + this.jdbcTemplate = jdbcTemplate; + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java new file mode 100644 index 00000000..6ef39071 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java @@ -0,0 +1,18 @@ +package com.codingapi.springboot.fast.script; + +import groovy.lang.Binding; +import groovy.lang.GroovyShell; +import groovy.lang.Script; + + +public class ScriptRuntime { + + public static Object running(String script, ScriptContext context) { + Binding binding = new Binding(); + binding.setVariable("$hql", context.getDynamicQuery()); + binding.setVariable("$jdbc", context.getJdbcTemplate()); + GroovyShell groovyShell = new GroovyShell(binding); + Script userScript = groovyShell.parse(script); + return userScript.run(); + } +} diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java new file mode 100644 index 00000000..77563e33 --- /dev/null +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java @@ -0,0 +1,16 @@ +package com.codingapi.springboot.fast.script; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +class ScriptRuntimeTest { + + @Test + void running() { + Object res = ScriptRuntime.running("return 1",ScriptContext.getInstance()); + assertEquals(1,res); + } +} \ No newline at end of file From 928900093565c65cdee04fbef8e6c7d8e4b2d3df Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Sun, 31 Dec 2023 23:06:30 +0800 Subject: [PATCH 10/29] add test --- .../springboot/fast/jdbc/JdbcQuery.java | 45 +++++++++++ .../fast/mapping/DynamicMappingRegister.java | 81 ++++++++----------- .../fast/mapping/DynamicScriptRegister.java | 3 +- .../springboot/fast/script/ScriptContext.java | 8 +- .../springboot/fast/script/ScriptRuntime.java | 2 +- 5 files changed, 85 insertions(+), 54 deletions(-) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java new file mode 100644 index 00000000..171fd16b --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java @@ -0,0 +1,45 @@ +package com.codingapi.springboot.fast.jdbc; + +import org.apache.commons.text.CaseUtils; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class JdbcQuery { + + private final org.springframework.jdbc.core.JdbcTemplate jdbcTemplate; + + public JdbcQuery(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + private static class CamelCaseRowMapper implements RowMapper> { + + @Override + public Map mapRow(ResultSet rs, int rowNum) throws SQLException { + ResultSetMetaData metaData = rs.getMetaData(); + int columnCount = metaData.getColumnCount(); + Map map = new HashMap<>(columnCount); + for (int i = 1; i <= columnCount; i++) { + String columnName = metaData.getColumnLabel(i); + map.put(CaseUtils.toCamelCase(columnName,false), rs.getObject(i)); + } + return map; + } + } + + public List> queryForList(String sql, Object... params) { + return jdbcTemplate.query(sql, params, new CamelCaseRowMapper()); + } + + public List queryForList(String sql, Class clazz, Object... params) { + return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz)); + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java index ca3cdac8..6bd68513 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java @@ -1,50 +1,48 @@ package com.codingapi.springboot.fast.mapping; import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.jdbc.JdbcQuery; import lombok.AllArgsConstructor; import lombok.SneakyThrows; -import org.apache.commons.text.CaseUtils; -import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.lang.reflect.Method; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.util.HashMap; import java.util.List; import java.util.Map; -@AllArgsConstructor public class DynamicMappingRegister { private final MvcEndpointMapping mvcEndpointMapping; private final DynamicQuery dynamicQuery; - private final JdbcTemplate jdbcTemplate; + private final JdbcQuery jdbcQuery; + public DynamicMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + this.mvcEndpointMapping = mvcEndpointMapping; + this.dynamicQuery = dynamicQuery; + this.jdbcQuery = new JdbcQuery(jdbcTemplate); + } - private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql,Class clazz, Object ... params) { - Object handler = new JdbcMapping( jdbcTemplate,sql,clazz,params); - Method method = getJdbcMethod(); + private void addJdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object ... params) { + JdbcMapping handler = new JdbcMapping(jdbcQuery,sql,clazz,params); + Method method = handler.getJdbcMethod(); mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); } private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql, Object ... params) { - Object handler = new JdbcMapMapping( jdbcTemplate,sql,params); - Method method = getJdbcMapMethod(); + JdbcMapMapping handler = new JdbcMapMapping(jdbcQuery,sql,params); + Method method = handler.getJdbcMapMethod(); mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); } private void addHqlMapping(String mapping, RequestMethod requestMethod,String hql,Class clazz, Object ... params) { - Object handler = new HqlMapping(dynamicQuery,hql,clazz,params); - Method method = getHqlMethod(); + HqlMapping handler = new HqlMapping(dynamicQuery,hql,clazz,params); + Method method = handler.getHqlMethod(); mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); } @@ -57,11 +55,11 @@ private void addHqlMapping(String mapping, RequestMethod requestMethod,String hq public Object test(DynamicMapping dynamicMapping) { return switch (dynamicMapping.getType()) { case JDBC -> - new JdbcMapping(jdbcTemplate, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); + new JdbcMapping(jdbcQuery, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); case HQL -> new HqlMapping(dynamicQuery, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); case JDBC_MAP -> - new JdbcMapMapping(jdbcTemplate, dynamicMapping.getSql(), dynamicMapping.getParams()).execute(); + new JdbcMapMapping(jdbcQuery, dynamicMapping.getSql(), dynamicMapping.getParams()).execute(); }; } @@ -95,64 +93,46 @@ public void removeMapping(String mapping,RequestMethod requestMethod) { } - @SneakyThrows - private Method getJdbcMethod(){ - return JdbcMapping.class.getDeclaredMethod("execute"); - } - @SneakyThrows - private Method getJdbcMapMethod(){ - return JdbcMapMapping.class.getDeclaredMethod("execute"); - } - - @SneakyThrows - private Method getHqlMethod(){ - return HqlMapping.class.getDeclaredMethod("execute"); - } @AllArgsConstructor public static class JdbcMapMapping{ - private final JdbcTemplate jdbcTemplate; + private final JdbcQuery jdbcQuery; private final String sql; private final Object[] params; @ResponseBody public List> execute() { - return jdbcTemplate.query(sql, params, new CamelCaseRowMapper()); + return jdbcQuery.queryForList(sql, params); } - private static class CamelCaseRowMapper implements RowMapper> { - - @Override - public Map mapRow(ResultSet rs, int rowNum) throws SQLException { - ResultSetMetaData metaData = rs.getMetaData(); - int columnCount = metaData.getColumnCount(); - Map map = new HashMap<>(columnCount); - for (int i = 1; i <= columnCount; i++) { - String columnName = metaData.getColumnLabel(i); - map.put(CaseUtils.toCamelCase(columnName,false), rs.getObject(i)); - } - return map; - } + @SneakyThrows + private Method getJdbcMapMethod(){ + return this.getClass().getDeclaredMethod("execute"); } + } @AllArgsConstructor public static class JdbcMapping{ - private final JdbcTemplate jdbcTemplate; + private final JdbcQuery jdbcQuery; private final String sql; private final Class clazz; private final Object[] params; @ResponseBody public List execute() { - return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz)); + return jdbcQuery.queryForList(sql, clazz, params); } + @SneakyThrows + private Method getJdbcMethod(){ + return this.getClass().getDeclaredMethod("execute"); + } } @@ -170,6 +150,11 @@ public static class HqlMapping{ public List execute() { return dynamicQuery.listQuery(clazz,hql, params); } + + @SneakyThrows + private Method getHqlMethod(){ + return this.getClass().getDeclaredMethod("execute"); + } } } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java index e14e5036..44630e42 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java @@ -1,6 +1,7 @@ package com.codingapi.springboot.fast.mapping; import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.jdbc.JdbcQuery; import com.codingapi.springboot.fast.script.DynamicScript; import com.codingapi.springboot.fast.script.ScriptContext; import org.springframework.jdbc.core.JdbcTemplate; @@ -14,7 +15,7 @@ public class DynamicScriptRegister { public DynamicScriptRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { this.mvcEndpointMapping = mvcEndpointMapping; - ScriptContext.getInstance().init(dynamicQuery, jdbcTemplate); + ScriptContext.getInstance().init(dynamicQuery, new JdbcQuery(jdbcTemplate)); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java index 48992c0e..48efc3bd 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java @@ -1,8 +1,8 @@ package com.codingapi.springboot.fast.script; import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.jdbc.JdbcQuery; import lombok.Getter; -import org.springframework.jdbc.core.JdbcTemplate; public class ScriptContext { @@ -18,12 +18,12 @@ private ScriptContext() { @Getter private DynamicQuery dynamicQuery; @Getter - private JdbcTemplate jdbcTemplate; + private JdbcQuery jdbcQuery; - public void init(DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + public void init(DynamicQuery dynamicQuery, JdbcQuery jdbcQuery) { this.dynamicQuery = dynamicQuery; - this.jdbcTemplate = jdbcTemplate; + this.jdbcQuery = jdbcQuery; } } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java index 6ef39071..b75858c0 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java @@ -10,7 +10,7 @@ public class ScriptRuntime { public static Object running(String script, ScriptContext context) { Binding binding = new Binding(); binding.setVariable("$hql", context.getDynamicQuery()); - binding.setVariable("$jdbc", context.getJdbcTemplate()); + binding.setVariable("$jdbc", context.getJdbcQuery()); GroovyShell groovyShell = new GroovyShell(binding); Script userScript = groovyShell.parse(script); return userScript.run(); From 0cc68558d27e7fd02b6a7ffada0046c889600a4b Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Sun, 31 Dec 2023 23:31:52 +0800 Subject: [PATCH 11/29] add test --- .../fast/DataFastConfiguration.java | 12 +- .../BaseMapping.java} | 23 ++- .../fast/mapping/DynamicMapping.java | 48 ------ .../fast/mapping/DynamicMappingRegister.java | 160 ------------------ .../fast/mapping/DynamicScriptRegister.java | 50 ------ .../fast/mapping/MvcMappingRegister.java | 67 ++++++++ .../MvcRunningContext.java} | 11 +- .../springboot/fast/mapping/SQLMapping.java | 53 ++++++ .../fast/mapping/ScriptMapping.java | 30 ++++ .../springboot/fast/script/ScriptRuntime.java | 5 +- .../fast/script/ScriptRuntimeTest.java | 3 +- 11 files changed, 172 insertions(+), 290 deletions(-) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{script/DynamicScript.java => mapping/BaseMapping.java} (55%) delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{script/ScriptContext.java => mapping/MvcRunningContext.java} (68%) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java index 6f326174..74e8eece 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java @@ -3,8 +3,7 @@ import com.codingapi.springboot.fast.dynamic.DynamicQuery; import com.codingapi.springboot.fast.executor.JpaExecutor; import com.codingapi.springboot.fast.manager.EntityManagerInitializer; -import com.codingapi.springboot.fast.mapping.DynamicMappingRegister; -import com.codingapi.springboot.fast.mapping.DynamicScriptRegister; +import com.codingapi.springboot.fast.mapping.MvcMappingRegister; import com.codingapi.springboot.fast.mapping.MvcEndpointMapping; import com.codingapi.springboot.fast.registrar.MvcMappingRegistrar; import org.springframework.aop.Advisor; @@ -32,15 +31,10 @@ public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handle @Bean @ConditionalOnMissingBean - public DynamicMappingRegister dynamicMapping(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { - return new DynamicMappingRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); + public MvcMappingRegister mvcMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + return new MvcMappingRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); } - @Bean - @ConditionalOnMissingBean - public DynamicScriptRegister dynamicScriptRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { - return new DynamicScriptRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); - } @Bean(initMethod = "registerMvcMapping") diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java similarity index 55% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java index 560ff2b2..d2ba5532 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/DynamicScript.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java @@ -1,26 +1,25 @@ -package com.codingapi.springboot.fast.script; +package com.codingapi.springboot.fast.mapping; import lombok.Getter; -import lombok.Setter; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.lang.reflect.Method; -@Setter @Getter -public class DynamicScript { +public abstract class BaseMapping { - private String script; - private String mapping; - private RequestMethod requestMethod; + protected String mapping; + protected RequestMethod requestMethod; + + public BaseMapping(String mapping, RequestMethod requestMethod) { + this.mapping = mapping; + this.requestMethod = requestMethod; + } @ResponseBody - public Object execute() { - ScriptContext context = ScriptContext.getInstance(); - return ScriptRuntime.running(script,context); - } + public abstract Object execute(); public Method getExecuteMethod() { try { @@ -29,6 +28,4 @@ public Method getExecuteMethod() { throw new RuntimeException(e); } } - - } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java deleted file mode 100644 index 6b53e3e4..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMapping.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.springframework.web.bind.annotation.RequestMethod; - -@Getter -@Setter -@NoArgsConstructor -public class DynamicMapping { - - private String mapping; - private RequestMethod requestMethod; - private String sql; - private Class clazz; - private Object[] params; - private Type type; - - public DynamicMapping(Type type, String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { - this.type = type; - this.mapping = mapping; - this.requestMethod = requestMethod; - this.sql = sql; - this.clazz = clazz; - this.params = params; - } - - - public static DynamicMapping jdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { - return new DynamicMapping(Type.JDBC, mapping, requestMethod, sql, clazz, params); - } - - public static DynamicMapping jdbcMapMapping(String mapping, RequestMethod requestMethod, String sql, Object... params) { - return new DynamicMapping(Type.JDBC_MAP, mapping, requestMethod, sql, null, params); - } - - public static DynamicMapping hqlMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { - return new DynamicMapping(Type.HQL, mapping, requestMethod, sql, clazz, params); - } - - - - enum Type { - JDBC, HQL, JDBC_MAP - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java deleted file mode 100644 index 6bd68513..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicMappingRegister.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import com.codingapi.springboot.fast.dynamic.DynamicQuery; -import com.codingapi.springboot.fast.jdbc.JdbcQuery; -import lombok.AllArgsConstructor; -import lombok.SneakyThrows; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; - -public class DynamicMappingRegister { - - private final MvcEndpointMapping mvcEndpointMapping; - - private final DynamicQuery dynamicQuery; - - private final JdbcQuery jdbcQuery; - - public DynamicMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { - this.mvcEndpointMapping = mvcEndpointMapping; - this.dynamicQuery = dynamicQuery; - this.jdbcQuery = new JdbcQuery(jdbcTemplate); - } - - private void addJdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object ... params) { - JdbcMapping handler = new JdbcMapping(jdbcQuery,sql,clazz,params); - Method method = handler.getJdbcMethod(); - mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); - } - - - private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql, Object ... params) { - JdbcMapMapping handler = new JdbcMapMapping(jdbcQuery,sql,params); - Method method = handler.getJdbcMapMethod(); - mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); - } - - - private void addHqlMapping(String mapping, RequestMethod requestMethod,String hql,Class clazz, Object ... params) { - HqlMapping handler = new HqlMapping(dynamicQuery,hql,clazz,params); - Method method = handler.getHqlMethod(); - mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method); - } - - /** - * test dynamic mapping - * @param dynamicMapping dynamic mapping - * @return result - */ - @ResponseBody - public Object test(DynamicMapping dynamicMapping) { - return switch (dynamicMapping.getType()) { - case JDBC -> - new JdbcMapping(jdbcQuery, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); - case HQL -> - new HqlMapping(dynamicQuery, dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()).execute(); - case JDBC_MAP -> - new JdbcMapMapping(jdbcQuery, dynamicMapping.getSql(), dynamicMapping.getParams()).execute(); - }; - } - - /** - * add dynamic mapping - * @param dynamicMapping dynamic mapping - */ - public void addMapping(DynamicMapping dynamicMapping) { - switch (dynamicMapping.getType()) { - case JDBC: - addJdbcMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()); - break; - case HQL: - addHqlMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams()); - break; - case JDBC_MAP: - addJdbcMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getParams()); - break; - default: - throw new RuntimeException("not support type"); - } - } - - /** - * remove mapping - * @param mapping mapping - * @param requestMethod request method - */ - public void removeMapping(String mapping,RequestMethod requestMethod) { - mvcEndpointMapping.removeMapping(mapping,requestMethod); - } - - - - - - @AllArgsConstructor - public static class JdbcMapMapping{ - - private final JdbcQuery jdbcQuery; - private final String sql; - private final Object[] params; - - @ResponseBody - public List> execute() { - return jdbcQuery.queryForList(sql, params); - } - - @SneakyThrows - private Method getJdbcMapMethod(){ - return this.getClass().getDeclaredMethod("execute"); - } - - } - - - @AllArgsConstructor - public static class JdbcMapping{ - - private final JdbcQuery jdbcQuery; - private final String sql; - private final Class clazz; - private final Object[] params; - - @ResponseBody - public List execute() { - return jdbcQuery.queryForList(sql, clazz, params); - } - - @SneakyThrows - private Method getJdbcMethod(){ - return this.getClass().getDeclaredMethod("execute"); - } - - - } - - - @AllArgsConstructor - public static class HqlMapping{ - - private final DynamicQuery dynamicQuery; - private final String hql; - private final Class clazz; - private final Object[] params; - - @ResponseBody - public List execute() { - return dynamicQuery.listQuery(clazz,hql, params); - } - - @SneakyThrows - private Method getHqlMethod(){ - return this.getClass().getDeclaredMethod("execute"); - } - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java deleted file mode 100644 index 44630e42..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/DynamicScriptRegister.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import com.codingapi.springboot.fast.dynamic.DynamicQuery; -import com.codingapi.springboot.fast.jdbc.JdbcQuery; -import com.codingapi.springboot.fast.script.DynamicScript; -import com.codingapi.springboot.fast.script.ScriptContext; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -public class DynamicScriptRegister { - - private final MvcEndpointMapping mvcEndpointMapping; - - - public DynamicScriptRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { - this.mvcEndpointMapping = mvcEndpointMapping; - ScriptContext.getInstance().init(dynamicQuery, new JdbcQuery(jdbcTemplate)); - } - - - /** - * test dynamic mapping - * @param dynamicScript dynamic mapping - **/ - public void addMapping(DynamicScript dynamicScript) { - mvcEndpointMapping.addMapping(dynamicScript.getMapping(), dynamicScript.getRequestMethod(), - dynamicScript, dynamicScript.getExecuteMethod()); - } - - /** - * remove mapping - * @param mapping mapping - * @param requestMethod requestMethod - */ - public void removeMapping(String mapping, RequestMethod requestMethod) { - mvcEndpointMapping.removeMapping(mapping, requestMethod); - } - - /** - * test dynamic mapping - * @param dynamicScript dynamic mapping - * @return result - */ - @ResponseBody - public Object test(DynamicScript dynamicScript) { - return dynamicScript.execute(); - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java new file mode 100644 index 00000000..90de24ef --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java @@ -0,0 +1,67 @@ +package com.codingapi.springboot.fast.mapping; + +import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.jdbc.JdbcQuery; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.RequestMethod; + + +public class MvcMappingRegister { + + private final MvcEndpointMapping mvcEndpointMapping; + + public MvcMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { + this.mvcEndpointMapping = mvcEndpointMapping; + MvcRunningContext.getInstance().init(dynamicQuery, new JdbcQuery(jdbcTemplate)); + } + + + /** + * test dynamic mapping + * @param SQLMapping dynamic mapping + * @return result + */ + public Object test(SQLMapping sqlMapping) { + return sqlMapping.execute(); + } + + /** + * add dynamic mapping + * @param SQLMapping dynamic mapping + */ + public void addMapping(SQLMapping sqlMapping) { + mvcEndpointMapping.addMapping(sqlMapping.getMapping(), sqlMapping.getRequestMethod(), + sqlMapping, sqlMapping.getExecuteMethod()); + } + + /** + * test dynamic mapping + * @param scriptMapping dynamic mapping + **/ + public void addMapping(ScriptMapping scriptMapping) { + mvcEndpointMapping.addMapping(scriptMapping.getMapping(), scriptMapping.getRequestMethod(), + scriptMapping, scriptMapping.getExecuteMethod()); + } + + + /** + * test dynamic mapping + * @param scriptMapping dynamic mapping + * @return result + */ + public Object test(ScriptMapping scriptMapping) { + return scriptMapping.execute(); + } + + + /** + * remove mapping + * @param mapping mapping + * @param requestMethod request method + */ + public void removeMapping(String mapping,RequestMethod requestMethod) { + mvcEndpointMapping.removeMapping(mapping,requestMethod); + } + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java similarity index 68% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java index 48efc3bd..c5a50577 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptContext.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java @@ -1,20 +1,17 @@ -package com.codingapi.springboot.fast.script; +package com.codingapi.springboot.fast.mapping; import com.codingapi.springboot.fast.dynamic.DynamicQuery; import com.codingapi.springboot.fast.jdbc.JdbcQuery; import lombok.Getter; -public class ScriptContext { +public class MvcRunningContext { @Getter - private final static ScriptContext instance = new ScriptContext(); - - - private ScriptContext() { + private final static MvcRunningContext instance = new MvcRunningContext(); + private MvcRunningContext() { } - @Getter private DynamicQuery dynamicQuery; @Getter diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java new file mode 100644 index 00000000..e9c68074 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java @@ -0,0 +1,53 @@ +package com.codingapi.springboot.fast.mapping; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Getter +@Setter +public class SQLMapping extends BaseMapping{ + + private String sql; + private Class clazz; + private Object[] params; + private Type type; + + public SQLMapping(Type type,String mapping, RequestMethod requestMethod, String sql, Class clazz, Object[] params) { + super(mapping, requestMethod); + this.sql = sql; + this.clazz = clazz; + this.params = params; + this.type = type; + } + + public static SQLMapping jdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { + return new SQLMapping(Type.JDBC, mapping, requestMethod, sql, clazz, params); + } + + public static SQLMapping jdbcMapMapping(String mapping, RequestMethod requestMethod, String sql, Object... params) { + return new SQLMapping(Type.JDBC_MAP, mapping, requestMethod, sql, null, params); + } + + public static SQLMapping hqlMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { + return new SQLMapping(Type.HQL, mapping, requestMethod, sql, clazz, params); + } + + + enum Type { + JDBC, HQL, JDBC_MAP + } + + + @ResponseBody + public Object execute() { + return switch (type) { + case JDBC -> MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params); + case HQL -> MvcRunningContext.getInstance().getDynamicQuery().listQuery(clazz, sql, params); + case JDBC_MAP -> MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, params); + }; + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java new file mode 100644 index 00000000..9bf450ca --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java @@ -0,0 +1,30 @@ +package com.codingapi.springboot.fast.mapping; + +import com.codingapi.springboot.fast.script.ScriptRuntime; +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Setter +@Getter +public class ScriptMapping extends BaseMapping{ + + private String script; + + public ScriptMapping(String mapping, RequestMethod requestMethod, String script) { + super(mapping, requestMethod); + this.script = script; + } + + @ResponseBody + public Object execute() { + MvcRunningContext context = MvcRunningContext.getInstance(); + return ScriptRuntime.running(script,context); + } + + + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java index b75858c0..a1bc3e2f 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.fast.script; +import com.codingapi.springboot.fast.mapping.MvcRunningContext; import groovy.lang.Binding; import groovy.lang.GroovyShell; import groovy.lang.Script; @@ -7,9 +8,9 @@ public class ScriptRuntime { - public static Object running(String script, ScriptContext context) { + public static Object running(String script, MvcRunningContext context) { Binding binding = new Binding(); - binding.setVariable("$hql", context.getDynamicQuery()); + binding.setVariable("$jpa", context.getDynamicQuery()); binding.setVariable("$jdbc", context.getJdbcQuery()); GroovyShell groovyShell = new GroovyShell(binding); Script userScript = groovyShell.parse(script); diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java index 77563e33..5f364ff8 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.fast.script; +import com.codingapi.springboot.fast.mapping.MvcRunningContext; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -10,7 +11,7 @@ class ScriptRuntimeTest { @Test void running() { - Object res = ScriptRuntime.running("return 1",ScriptContext.getInstance()); + Object res = ScriptRuntime.running("return 1", MvcRunningContext.getInstance()); assertEquals(1,res); } } \ No newline at end of file From 800ff33e82ae19826681969151dfdaad76e5e5c0 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 10:36:15 +0800 Subject: [PATCH 12/29] fix response mvc --- .../codingapi/springboot/fast/mapping/BaseMapping.java | 3 ++- .../springboot/fast/mapping/MvcMappingRegister.java | 5 +++-- .../codingapi/springboot/fast/mapping/SQLMapping.java | 9 +++++---- .../codingapi/springboot/fast/mapping/ScriptMapping.java | 5 +++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java index d2ba5532..d237c47c 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.fast.mapping; +import com.codingapi.springboot.framework.dto.response.SingleResponse; import lombok.Getter; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -19,7 +20,7 @@ public BaseMapping(String mapping, RequestMethod requestMethod) { @ResponseBody - public abstract Object execute(); + public abstract SingleResponse execute(); public Method getExecuteMethod() { try { diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java index 90de24ef..a6d6896d 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java @@ -2,6 +2,7 @@ import com.codingapi.springboot.fast.dynamic.DynamicQuery; import com.codingapi.springboot.fast.jdbc.JdbcQuery; +import com.codingapi.springboot.framework.dto.response.SingleResponse; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RequestMethod; @@ -21,7 +22,7 @@ public MvcMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dy * @param SQLMapping dynamic mapping * @return result */ - public Object test(SQLMapping sqlMapping) { + public SingleResponse test(SQLMapping sqlMapping) { return sqlMapping.execute(); } @@ -49,7 +50,7 @@ public void addMapping(ScriptMapping scriptMapping) { * @param scriptMapping dynamic mapping * @return result */ - public Object test(ScriptMapping scriptMapping) { + public SingleResponse test(ScriptMapping scriptMapping) { return scriptMapping.execute(); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java index e9c68074..6d084fcd 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.fast.mapping; +import com.codingapi.springboot.framework.dto.response.SingleResponse; import lombok.Getter; import lombok.Setter; import org.springframework.web.bind.annotation.RequestMethod; @@ -42,11 +43,11 @@ enum Type { @ResponseBody - public Object execute() { + public SingleResponse execute() { return switch (type) { - case JDBC -> MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params); - case HQL -> MvcRunningContext.getInstance().getDynamicQuery().listQuery(clazz, sql, params); - case JDBC_MAP -> MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, params); + case JDBC -> SingleResponse.of(MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params)); + case HQL -> SingleResponse.of(MvcRunningContext.getInstance().getDynamicQuery().listQuery(clazz, sql, params)); + case JDBC_MAP -> SingleResponse.of(MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, params)); }; } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java index 9bf450ca..89375be0 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java @@ -1,6 +1,7 @@ package com.codingapi.springboot.fast.mapping; import com.codingapi.springboot.fast.script.ScriptRuntime; +import com.codingapi.springboot.framework.dto.response.SingleResponse; import lombok.Getter; import lombok.Setter; import org.springframework.web.bind.annotation.RequestMethod; @@ -19,9 +20,9 @@ public ScriptMapping(String mapping, RequestMethod requestMethod, String script) } @ResponseBody - public Object execute() { + public SingleResponse execute() { MvcRunningContext context = MvcRunningContext.getInstance(); - return ScriptRuntime.running(script,context); + return SingleResponse.of(ScriptRuntime.running(script,context)); } From 1b1f8020f5fcb19aa612ea6b62a12a62dde14797 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 11:21:17 +0800 Subject: [PATCH 13/29] fix PageRequest --- .../springboot/framework/dto/request/PageRequest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java index 4dc92fb9..3f80d8d1 100644 --- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java @@ -24,7 +24,7 @@ public class PageRequest extends org.springframework.data.domain.PageRequest { private org.springframework.data.domain.PageRequest pageRequest; public PageRequest(int current, int pageSize, Sort sort) { - super(current > 0 ? current-- : 0, pageSize, sort); + super(current, pageSize, sort); this.current = current; this.pageSize = pageSize; this.pageRequest = org.springframework.data.domain.PageRequest.of(current, pageSize, sort); @@ -99,17 +99,17 @@ public Sort getSort() { } @Override - public org.springframework.data.domain.PageRequest next() { + public PageRequest next() { return new PageRequest(current + 1, getPageSize(), getSort()); } @Override - public org.springframework.data.domain.PageRequest previous() { + public PageRequest previous() { return current == 0 ? this : new PageRequest(current - 1, getPageSize(), getSort()); } @Override - public org.springframework.data.domain.PageRequest first() { + public PageRequest first() { return new PageRequest(0, getPageSize(), getSort()); } From 1295ad02dc4797febf0b5306d480a61e8c151121 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 12:02:18 +0800 Subject: [PATCH 14/29] fix PageRequest --- .../springboot/fast/script/ScriptRequest.java | 16 ++++++++++++++++ .../springboot/fast/script/ScriptRuntime.java | 5 +++++ 2 files changed, 21 insertions(+) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java new file mode 100644 index 00000000..39a07697 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java @@ -0,0 +1,16 @@ +package com.codingapi.springboot.fast.script; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class ScriptRequest { + + private final HttpServletRequest request; + + public String getParameter(String key, String defaultValue) { + String result = request.getParameter(key); + return result == null ? defaultValue : result; + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java index a1bc3e2f..e32789b4 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java @@ -4,12 +4,17 @@ import groovy.lang.Binding; import groovy.lang.GroovyShell; import groovy.lang.Script; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; public class ScriptRuntime { public static Object running(String script, MvcRunningContext context) { Binding binding = new Binding(); + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); + ScriptRequest request = new ScriptRequest(attributes.getRequest()); + binding.setVariable("$request", request); binding.setVariable("$jpa", context.getDynamicQuery()); binding.setVariable("$jdbc", context.getJdbcQuery()); GroovyShell groovyShell = new GroovyShell(binding); From cc20d7d97b0beae4b3c4abe93c234c381ffffd3d Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 16:04:25 +0800 Subject: [PATCH 15/29] fix ScriptRequest --- .../springboot/fast/jdbc/JdbcQuery.java | 30 +++++++++++++++++-- .../springboot/fast/mapping/BaseMapping.java | 4 +-- .../fast/mapping/MvcMappingRegister.java | 6 ++-- .../springboot/fast/mapping/SQLMapping.java | 3 +- .../fast/mapping/ScriptMapping.java | 20 +++++++++++-- .../springboot/fast/script/ScriptRequest.java | 30 +++++++++++++++++++ 6 files changed, 83 insertions(+), 10 deletions(-) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java index 171fd16b..423ba1ea 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQuery.java @@ -1,6 +1,9 @@ package com.codingapi.springboot.fast.jdbc; import org.apache.commons.text.CaseUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.RowMapper; @@ -28,13 +31,13 @@ public Map mapRow(ResultSet rs, int rowNum) throws SQLException Map map = new HashMap<>(columnCount); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); - map.put(CaseUtils.toCamelCase(columnName,false), rs.getObject(i)); + map.put(CaseUtils.toCamelCase(columnName, false), rs.getObject(i)); } return map; } } - public List> queryForList(String sql, Object... params) { + public List> queryForList(String sql, Object... params) { return jdbcTemplate.query(sql, params, new CamelCaseRowMapper()); } @@ -42,4 +45,27 @@ public List queryForList(String sql, Class clazz, Object... params) { return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz)); } + public Page queryForPage(String sql, String countSql, Class clazz, PageRequest pageRequest, Object... params) { + List list = jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz)); + long count = this.countQuery(countSql, params); + return new PageImpl<>(list, pageRequest, count); + } + + public Page> queryForPage(String sql, String countSql, PageRequest pageRequest, Object... params) { + List> list = jdbcTemplate.query(sql, params, new CamelCaseRowMapper()); + + long count = this.countQuery(countSql, params); + return new PageImpl<>(list, pageRequest, count); + } + + + private long countQuery(String sql, Object... params) { + int paramsLength = params.length; + int countSqlParamsLength = sql.split("\\?").length - 1; + Object[] newParams = new Object[countSqlParamsLength]; + if (paramsLength > countSqlParamsLength) { + System.arraycopy(params, 0, newParams, 0, countSqlParamsLength); + } + return jdbcTemplate.queryForObject(sql, newParams, Long.class); + } } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java index d237c47c..bb871bfc 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java @@ -1,6 +1,6 @@ package com.codingapi.springboot.fast.mapping; -import com.codingapi.springboot.framework.dto.response.SingleResponse; +import com.codingapi.springboot.framework.dto.response.Response; import lombok.Getter; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -20,7 +20,7 @@ public BaseMapping(String mapping, RequestMethod requestMethod) { @ResponseBody - public abstract SingleResponse execute(); + public abstract Response execute(); public Method getExecuteMethod() { try { diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java index a6d6896d..39dfcd38 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java @@ -2,7 +2,7 @@ import com.codingapi.springboot.fast.dynamic.DynamicQuery; import com.codingapi.springboot.fast.jdbc.JdbcQuery; -import com.codingapi.springboot.framework.dto.response.SingleResponse; +import com.codingapi.springboot.framework.dto.response.Response; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RequestMethod; @@ -22,7 +22,7 @@ public MvcMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dy * @param SQLMapping dynamic mapping * @return result */ - public SingleResponse test(SQLMapping sqlMapping) { + public Response test(SQLMapping sqlMapping) { return sqlMapping.execute(); } @@ -50,7 +50,7 @@ public void addMapping(ScriptMapping scriptMapping) { * @param scriptMapping dynamic mapping * @return result */ - public SingleResponse test(ScriptMapping scriptMapping) { + public Response test(ScriptMapping scriptMapping) { return scriptMapping.execute(); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java index 6d084fcd..f8b72022 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.fast.mapping; +import com.codingapi.springboot.framework.dto.response.Response; import com.codingapi.springboot.framework.dto.response.SingleResponse; import lombok.Getter; import lombok.Setter; @@ -43,7 +44,7 @@ enum Type { @ResponseBody - public SingleResponse execute() { + public Response execute() { return switch (type) { case JDBC -> SingleResponse.of(MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params)); case HQL -> SingleResponse.of(MvcRunningContext.getInstance().getDynamicQuery().listQuery(clazz, sql, params)); diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java index 89375be0..4c1c434c 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java @@ -1,12 +1,17 @@ package com.codingapi.springboot.fast.mapping; import com.codingapi.springboot.fast.script.ScriptRuntime; +import com.codingapi.springboot.framework.dto.response.MultiResponse; +import com.codingapi.springboot.framework.dto.response.Response; import com.codingapi.springboot.framework.dto.response.SingleResponse; import lombok.Getter; import lombok.Setter; +import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Setter @Getter @@ -20,9 +25,20 @@ public ScriptMapping(String mapping, RequestMethod requestMethod, String script) } @ResponseBody - public SingleResponse execute() { + public Response execute() { MvcRunningContext context = MvcRunningContext.getInstance(); - return SingleResponse.of(ScriptRuntime.running(script,context)); + Object result = ScriptRuntime.running(script,context); + if(result instanceof List || result.getClass().isArray()){ + return SingleResponse.of(result); + }else{ + if(result instanceof MultiResponse){ + return (MultiResponse)result; + } + if(result instanceof Page){ + return MultiResponse.of((Page) result); + } + return SingleResponse.of(result); + } } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java index 39a07697..22b1b708 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRequest.java @@ -1,5 +1,6 @@ package com.codingapi.springboot.fast.script; +import com.codingapi.springboot.framework.dto.request.PageRequest; import jakarta.servlet.http.HttpServletRequest; import lombok.AllArgsConstructor; @@ -13,4 +14,33 @@ public String getParameter(String key, String defaultValue) { return result == null ? defaultValue : result; } + public int getParameter(String key, int defaultValue) { + String result = request.getParameter(key); + return result == null ? defaultValue : Integer.parseInt(result); + } + + public float getParameter(String key, float defaultValue) { + String result = request.getParameter(key); + return result == null ? defaultValue : Float.parseFloat(result); + } + + public double getParameter(String key, double defaultValue) { + String result = request.getParameter(key); + return result == null ? defaultValue : Double.parseDouble(result); + } + + public long getParameter(String key, long defaultValue) { + String result = request.getParameter(key); + return result == null ? defaultValue : Long.parseLong(result); + } + + public boolean getParameter(String key, boolean defaultValue) { + String result = request.getParameter(key); + return result == null ? defaultValue : Boolean.parseBoolean(result); + } + + public PageRequest pageRequest(int pageNumber, int pageSize) { + return PageRequest.of(pageNumber, pageSize); + } + } From 0fea3c2baf554b6bacfe0297d3406107191bed2f Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 21:22:30 +0800 Subject: [PATCH 16/29] fix fast-data --- .../fast/DataFastConfiguration.java | 36 +----- .../fast/annotation/FastController.java | 11 -- .../fast/annotation/FastMapping.java | 38 ------ .../fast/dynamic/DynamicConfiguration.java | 21 ---- .../fast/dynamic/DynamicQueryContext.java | 23 ---- .../dynamic/DynamicQueryContextRegister.java | 16 --- .../exception/FastMappingErrorException.java | 8 -- .../springboot/fast/executor/JpaExecutor.java | 39 ------ .../springboot/fast/executor/JpaQuery.java | 114 ------------------ .../fast/executor/MvcMethodInterceptor.java | 39 ------ .../{dynamic => jpa}/DynamicRepository.java | 12 +- .../fast/{query => jpa}/FastRepository.java | 3 +- .../springboot/fast/{sort => jpa}/ISort.java | 2 +- .../DynamicQuery.java => jpa/JPAQuery.java} | 4 +- .../fast/jpa/JPAQueryConfiguration.java | 21 ++++ .../fast/jpa/JPAQueryContextRegister.java | 16 +++ .../springboot/fast/jpa/JpaQueryContext.java | 23 ++++ .../fast/{query => jpa}/QueryRequest.java | 2 +- .../fast/{sort => jpa}/SortRepository.java | 2 +- .../springboot/fast/mapping/BaseMapping.java | 32 ----- .../fast/mapping/MvcEndpointMapping.java | 59 --------- .../fast/mapping/MvcMappingRegister.java | 75 ++++++++---- .../fast/mapping/MvcRunningContext.java | 8 +- .../springboot/fast/mapping/SQLMapping.java | 55 --------- .../fast/mapping/ScriptMapping.java | 17 ++- .../DataFastBeanDefinitionRegistrar.java | 33 ----- .../fast/registrar/MvcMappingRegistrar.java | 94 --------------- .../springboot/fast/script/ScriptRuntime.java | 2 +- .../main/resources/META-INF/spring.factories | 3 +- ...ot.autoconfigure.AutoConfiguration.imports | 3 +- .../fast/DataFastApplicationTest.java | 34 ------ .../springboot/fast/entity/Demo.java | 2 +- .../springboot/fast/query/FastDemoQuery.java | 23 ---- .../fast/repository/DemoRepository.java | 4 +- 34 files changed, 151 insertions(+), 723 deletions(-) delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastController.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastMapping.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicConfiguration.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContext.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContextRegister.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/exception/FastMappingErrorException.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaExecutor.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaQuery.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodInterceptor.java rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{dynamic => jpa}/DynamicRepository.java (62%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{query => jpa}/FastRepository.java (94%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{sort => jpa}/ISort.java (65%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{dynamic/DynamicQuery.java => jpa/JPAQuery.java} (95%) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQueryConfiguration.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQueryContextRegister.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContext.java rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{query => jpa}/QueryRequest.java (99%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{sort => jpa}/SortRepository.java (94%) delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/DataFastBeanDefinitionRegistrar.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/MvcMappingRegistrar.java delete mode 100644 springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DataFastApplicationTest.java delete mode 100644 springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/query/FastDemoQuery.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java index 74e8eece..50653d1a 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java @@ -1,12 +1,9 @@ package com.codingapi.springboot.fast; -import com.codingapi.springboot.fast.dynamic.DynamicQuery; -import com.codingapi.springboot.fast.executor.JpaExecutor; +import com.codingapi.springboot.fast.jpa.JPAQuery; import com.codingapi.springboot.fast.manager.EntityManagerInitializer; import com.codingapi.springboot.fast.mapping.MvcMappingRegister; -import com.codingapi.springboot.fast.mapping.MvcEndpointMapping; -import com.codingapi.springboot.fast.registrar.MvcMappingRegistrar; -import org.springframework.aop.Advisor; +import jakarta.persistence.EntityManager; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; @@ -15,9 +12,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import jakarta.persistence.EntityManager; -import java.util.List; - @Configuration @ConditionalOnClass(WebMvcConfigurer.class) public class DataFastConfiguration { @@ -25,36 +19,16 @@ public class DataFastConfiguration { @Bean @ConditionalOnMissingBean - public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handlerMapping) { - return new MvcEndpointMapping(handlerMapping); - } - - @Bean - @ConditionalOnMissingBean - public MvcMappingRegister mvcMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { - return new MvcMappingRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate); + public MvcMappingRegister mvcMappingRegister(RequestMappingHandlerMapping handlerMapping, JPAQuery JPAQuery, JdbcTemplate jdbcTemplate) { + return new MvcMappingRegister(handlerMapping, JPAQuery, jdbcTemplate); } - - @Bean(initMethod = "registerMvcMapping") - @ConditionalOnMissingBean - public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping, - JpaExecutor jpaExecutor, - List advisors) { - return new MvcMappingRegistrar(mvcEndpointMapping, jpaExecutor,advisors); - } - @Bean @ConditionalOnMissingBean - public EntityManagerInitializer entityManagerInitializer(EntityManager entityManager){ + public EntityManagerInitializer entityManagerInitializer(EntityManager entityManager) { return new EntityManagerInitializer(entityManager); } - @Bean - @ConditionalOnMissingBean - public JpaExecutor jpaExecutor(EntityManager entityManager) { - return new JpaExecutor(entityManager); - } } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastController.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastController.java deleted file mode 100644 index e566cf7b..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastController.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.codingapi.springboot.fast.annotation; - -import java.lang.annotation.*; - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface FastController { - - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastMapping.java deleted file mode 100644 index 1b1d8bb2..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastMapping.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.codingapi.springboot.fast.annotation; - - -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) -@ResponseBody -public @interface FastMapping { - - /** - * execute jpa hql - */ - String value() default ""; - - - /** - * execute jpa count hql - */ - String countQuery() default ""; - - /** - * mvc request method - */ - RequestMethod method() default RequestMethod.GET; - - /** - * mvc request url - */ - String mapping() default ""; - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicConfiguration.java deleted file mode 100644 index 3a9ee082..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicConfiguration.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.codingapi.springboot.fast.dynamic; - -import jakarta.persistence.EntityManager; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Configuration -public class DynamicConfiguration { - - @Bean - public DynamicQuery dynamicQuery(EntityManager entityManager){ - return new DynamicQuery(entityManager); - } - - @Bean - public DynamicQueryContextRegister dynamicQueryContextRegister(DynamicQuery dynamicQuery){ - return new DynamicQueryContextRegister(dynamicQuery); - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContext.java deleted file mode 100644 index 7e1e9230..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContext.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.codingapi.springboot.fast.dynamic; - - -import lombok.Getter; - -public class DynamicQueryContext { - - @Getter - private static final DynamicQueryContext instance = new DynamicQueryContext(); - - private DynamicQueryContext() { - - } - - @Getter - private DynamicQuery dynamicQuery; - - void setDynamicQuery(DynamicQuery dynamicQuery) { - this.dynamicQuery = dynamicQuery; - } - - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContextRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContextRegister.java deleted file mode 100644 index 4ed1cb8d..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQueryContextRegister.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.codingapi.springboot.fast.dynamic; - -import lombok.AllArgsConstructor; -import org.springframework.beans.factory.InitializingBean; - -@AllArgsConstructor -public class DynamicQueryContextRegister implements InitializingBean { - - private DynamicQuery dynamicQuery; - - @Override - public void afterPropertiesSet() throws Exception { - DynamicQueryContext.getInstance().setDynamicQuery(dynamicQuery); - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/exception/FastMappingErrorException.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/exception/FastMappingErrorException.java deleted file mode 100644 index ce41c99c..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/exception/FastMappingErrorException.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.codingapi.springboot.fast.exception; - -public class FastMappingErrorException extends Exception { - - public FastMappingErrorException(String message) { - super(message); - } -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaExecutor.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaExecutor.java deleted file mode 100644 index 04067091..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaExecutor.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.codingapi.springboot.fast.executor; - -import com.codingapi.springboot.framework.dto.response.MultiResponse; -import com.codingapi.springboot.framework.dto.response.SingleResponse; -import lombok.AllArgsConstructor; -import org.springframework.data.domain.Page; - -import jakarta.persistence.EntityManager; -import java.util.Collection; -import java.util.List; - -@AllArgsConstructor -public class JpaExecutor { - - private final EntityManager entityManager; - - public Object execute(String hql, String countHql, Object[] args, Class returnType) { - //only execute query sql - JpaQuery query = new JpaQuery(hql, countHql, args, entityManager); - - if (returnType.equals(SingleResponse.class)) { - List list = (List) query.getResultList(); - return list == null && list.size() > 0 ? SingleResponse.of(list.get(0)) : SingleResponse.empty(); - } - - if (returnType.equals(MultiResponse.class)) { - Object returnData = query.getResultList(); - if (Page.class.isAssignableFrom(returnData.getClass())) { - return MultiResponse.of((Page) returnData); - } - - if (Collection.class.isAssignableFrom(returnData.getClass())) { - return MultiResponse.of((Collection) returnData); - } - } - - return query.getResultList(); - } -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaQuery.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaQuery.java deleted file mode 100644 index dbc4e118..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaQuery.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.codingapi.springboot.fast.executor; - -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.StringUtils; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.Parameter; -import jakarta.persistence.Query; -import java.lang.reflect.Field; -import java.util.Set; - -@Slf4j -public class JpaQuery { - private final Object[] args; - private final Query query; - private final String hql; - private final String countHql; - - private final EntityManager entityManager; - - public JpaQuery(String hql, String countHql, Object[] args, EntityManager entityManager) { - this.hql = hql; - this.countHql = countHql; - this.args = args; - this.entityManager = entityManager; - this.query = entityManager.createQuery(hql); - this.initParameter(query); - } - - /** - * init query parameter - */ - @SneakyThrows - private void initParameter(Query query) { - if (args != null && args.length > 0) { - Set> parameters = query.getParameters(); - for (Parameter parameter : parameters) { - Integer position = parameter.getPosition(); - if (position != null) { - query.setParameter(position, args[position - 1]); - } - if (StringUtils.hasText(parameter.getName())) { - String name = parameter.getName(); - Object obj = args[0]; - Field field = ReflectionUtils.findField(obj.getClass(), name); - if (field != null) { - field.setAccessible(true); - query.setParameter(name, field.get(obj)); - } - } - } - } - } - - /** - * is Page Request - */ - private boolean isPageable() { - if (args != null && args.length > 0 && StringUtils.hasText(countHql)) { - Object lastObj = args[args.length - 1]; - return lastObj instanceof Pageable; - } - return false; - } - - /** - * get PageRequest - */ - private Pageable getPageable() { - if (isPageable()) { - Object lastObj = args[args.length - 1]; - return (Pageable) lastObj; - } - return null; - } - - /** - * execute get list result data - */ - public Object getResultList() { - if (isPageable()) { - Pageable pageable = getPageable(); - query.setFirstResult((int) pageable.getOffset()); - query.setMaxResults(pageable.getPageSize()); - long total = getCount(); - return new PageImpl<>(query.getResultList(), pageable, total); - } - return query.getResultList(); - } - - - /** - * get sql execute data count - */ - private long getCount() { - Query countQuery = entityManager.createQuery(countHql); - initParameter(countQuery); - return (Long) countQuery.getSingleResult(); - } - - - /** - * get single result data - */ - public Object getSingleResult() { - return query.getSingleResult(); - } - - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodInterceptor.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodInterceptor.java deleted file mode 100644 index fba74734..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodInterceptor.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.codingapi.springboot.fast.executor; - -import com.codingapi.springboot.fast.annotation.FastMapping; -import lombok.AllArgsConstructor; -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; - -import java.lang.reflect.Method; - -@AllArgsConstructor -public class MvcMethodInterceptor implements MethodInterceptor { - - private final JpaExecutor jpaExecutor; - - @Override - public Object invoke(MethodInvocation invocation) - throws Throwable { - Method method = invocation.getMethod(); - Object[] args = invocation.getArguments(); - - if (method.equals(Object.class.getMethod("equals", Object.class))) { - return false; - } - - if (method.equals(Object.class.getMethod("hashCode"))) { - return hashCode(); - } - - FastMapping fastMapping = method.getAnnotation(FastMapping.class); - if (fastMapping != null) { - Class returnType = method.getReturnType(); - return jpaExecutor.execute(fastMapping.value(), fastMapping.countQuery(), args, returnType); - } - // mvc mapping proxy can't execute return null. - return null; - } - - -} \ No newline at end of file diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/DynamicRepository.java similarity index 62% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicRepository.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/DynamicRepository.java index cd50e728..30b65e5c 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/DynamicRepository.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.dynamic; +package com.codingapi.springboot.fast.jpa; import org.springframework.core.ResolvableType; import org.springframework.data.domain.Page; @@ -18,23 +18,23 @@ default Class getEntityClass() { } default List dynamicListQuery(String sql, Object... params) { - return (List) DynamicQueryContext.getInstance().getDynamicQuery().listQuery(getEntityClass(), sql, params); + return (List) JpaQueryContext.getInstance().getJPAQuery().listQuery(getEntityClass(), sql, params); } default List dynamicListQuery(Class clazz, String sql, Object... params) { - return (List) DynamicQueryContext.getInstance().getDynamicQuery().listQuery(clazz, sql, params); + return (List) JpaQueryContext.getInstance().getJPAQuery().listQuery(clazz, sql, params); } default Page dynamicPageQuery(String sql, String countSql, PageRequest request, Object... params) { - return (Page) DynamicQueryContext.getInstance().getDynamicQuery().pageQuery(getEntityClass(), sql, countSql, request, params); + return (Page) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, countSql, request, params); } default Page dynamicPageQuery(String sql, PageRequest request, Object... params) { - return (Page) DynamicQueryContext.getInstance().getDynamicQuery().pageQuery(getEntityClass(), sql, "select count(1) " + sql, request, params); + return (Page) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, "select count(1) " + sql, request, params); } default Page dynamicPageQuery(Class clazz, String sql, String countSql, PageRequest request, Object... params) { - return (Page) DynamicQueryContext.getInstance().getDynamicQuery().pageQuery(clazz, sql, countSql, request, params); + return (Page) JpaQueryContext.getInstance().getJPAQuery().pageQuery(clazz, sql, countSql, request, params); } } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/FastRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/FastRepository.java similarity index 94% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/FastRepository.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/FastRepository.java index f0476355..657624bc 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/FastRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/FastRepository.java @@ -1,6 +1,5 @@ -package com.codingapi.springboot.fast.query; +package com.codingapi.springboot.fast.jpa; -import com.codingapi.springboot.fast.dynamic.DynamicRepository; import com.codingapi.springboot.framework.dto.request.PageRequest; import jakarta.persistence.criteria.Order; import jakarta.persistence.criteria.Predicate; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/sort/ISort.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java similarity index 65% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/sort/ISort.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java index b4a689d3..2826f64d 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/sort/ISort.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.sort; +package com.codingapi.springboot.fast.jpa; public interface ISort { diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQuery.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java similarity index 95% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQuery.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java index 9fe90ccf..9e0ff15e 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/dynamic/DynamicQuery.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.dynamic; +package com.codingapi.springboot.fast.jpa; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; @@ -10,7 +10,7 @@ import java.util.List; @AllArgsConstructor -public class DynamicQuery { +public class JPAQuery { private final EntityManager entityManager; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQueryConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQueryConfiguration.java new file mode 100644 index 00000000..49033f5d --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQueryConfiguration.java @@ -0,0 +1,21 @@ +package com.codingapi.springboot.fast.jpa; + +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +public class JPAQueryConfiguration { + + @Bean + public JPAQuery dynamicQuery(EntityManager entityManager){ + return new JPAQuery(entityManager); + } + + @Bean + public JPAQueryContextRegister jpaQueryContextRegister(JPAQuery JPAQuery){ + return new JPAQueryContextRegister(JPAQuery); + } + +} 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 new file mode 100644 index 00000000..b6fc7198 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQueryContextRegister.java @@ -0,0 +1,16 @@ +package com.codingapi.springboot.fast.jpa; + +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.InitializingBean; + +@AllArgsConstructor +public class JPAQueryContextRegister implements InitializingBean { + + private JPAQuery JPAQuery; + + @Override + public void afterPropertiesSet() throws Exception { + JpaQueryContext.getInstance().setJPAQuery(JPAQuery); + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContext.java new file mode 100644 index 00000000..e39b2d5c --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JpaQueryContext.java @@ -0,0 +1,23 @@ +package com.codingapi.springboot.fast.jpa; + + +import lombok.Getter; + +public class JpaQueryContext { + + @Getter + private static final JpaQueryContext instance = new JpaQueryContext(); + + private JpaQueryContext() { + + } + + @Getter + private JPAQuery JPAQuery; + + void setJPAQuery(JPAQuery JPAQuery) { + this.JPAQuery = JPAQuery; + } + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/QueryRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/QueryRequest.java similarity index 99% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/QueryRequest.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/QueryRequest.java index 9bf11b71..d5fdf57b 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/QueryRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/QueryRequest.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.query; +package com.codingapi.springboot.fast.jpa; import com.codingapi.springboot.framework.dto.request.Filter; import com.codingapi.springboot.framework.dto.request.PageRequest; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/sort/SortRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java similarity index 94% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/sort/SortRepository.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java index 499ecd34..ed9d068a 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/sort/SortRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.sort; +package com.codingapi.springboot.fast.jpa; import com.codingapi.springboot.framework.dto.request.PageRequest; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java deleted file mode 100644 index bb871bfc..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/BaseMapping.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import com.codingapi.springboot.framework.dto.response.Response; -import lombok.Getter; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.lang.reflect.Method; - -@Getter -public abstract class BaseMapping { - - protected String mapping; - protected RequestMethod requestMethod; - - public BaseMapping(String mapping, RequestMethod requestMethod) { - this.mapping = mapping; - this.requestMethod = requestMethod; - } - - - @ResponseBody - public abstract Response execute(); - - public Method getExecuteMethod() { - try { - return this.getClass().getDeclaredMethod("execute"); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java deleted file mode 100644 index de8f7945..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import lombok.AllArgsConstructor; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.servlet.mvc.method.RequestMappingInfo; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import org.springframework.web.util.pattern.PathPatternParser; - -import java.lang.reflect.Method; - -@AllArgsConstructor -public class MvcEndpointMapping { - - private final RequestMappingHandlerMapping handlerMapping; - - /** - * add mvc mapping - * - * @param url mapping url - * @param requestMethod request method - * @param handler executor handler - * @param method executor method - */ - public void addMapping(String url, RequestMethod requestMethod, Object handler, Method method) { - - RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration(); - options.setPatternParser(new PathPatternParser()); - - RequestMappingInfo mappingInfo = RequestMappingInfo - .paths(url) - .methods(requestMethod) - .produces(MediaType.APPLICATION_JSON_VALUE) - .options(options) - .build(); - - handlerMapping.registerMapping(mappingInfo, handler, method); - } - - /** - * remove mvc mapping - * @param url mapping url - * @param requestMethod request method - */ - public void removeMapping(String url, RequestMethod requestMethod) { - RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration(); - options.setPatternParser(new PathPatternParser()); - - RequestMappingInfo mappingInfo = RequestMappingInfo - .paths(url) - .methods(requestMethod) - .produces(MediaType.APPLICATION_JSON_VALUE) - .options(options) - .build(); - - handlerMapping.unregisterMapping(mappingInfo); - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java index 39dfcd38..64deaf9b 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java @@ -1,46 +1,78 @@ package com.codingapi.springboot.fast.mapping; -import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.jpa.JPAQuery; import com.codingapi.springboot.fast.jdbc.JdbcQuery; import com.codingapi.springboot.framework.dto.response.Response; +import lombok.AllArgsConstructor; +import org.springframework.http.MediaType; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import org.springframework.web.util.pattern.PathPatternParser; +import java.lang.reflect.Method; +@AllArgsConstructor public class MvcMappingRegister { - private final MvcEndpointMapping mvcEndpointMapping; + private final RequestMappingHandlerMapping handlerMapping; - public MvcMappingRegister(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) { - this.mvcEndpointMapping = mvcEndpointMapping; - MvcRunningContext.getInstance().init(dynamicQuery, new JdbcQuery(jdbcTemplate)); + public MvcMappingRegister(RequestMappingHandlerMapping handlerMapping, JPAQuery JPAQuery, JdbcTemplate jdbcTemplate) { + this.handlerMapping = handlerMapping; + MvcRunningContext.getInstance().init(JPAQuery, new JdbcQuery(jdbcTemplate)); } - /** - * test dynamic mapping - * @param SQLMapping dynamic mapping - * @return result + * add mvc mapping + * + * @param url mapping url + * @param requestMethod request method + * @param handler executor handler + * @param method executor method */ - public Response test(SQLMapping sqlMapping) { - return sqlMapping.execute(); + public void addMapping(String url, RequestMethod requestMethod, Object handler, Method method) { + + RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration(); + options.setPatternParser(new PathPatternParser()); + + RequestMappingInfo mappingInfo = RequestMappingInfo + .paths(url) + .methods(requestMethod) + .produces(MediaType.APPLICATION_JSON_VALUE) + .options(options) + .build(); + + handlerMapping.registerMapping(mappingInfo, handler, method); } /** - * add dynamic mapping - * @param SQLMapping dynamic mapping + * remove mvc mapping + * @param url mapping url + * @param requestMethod request method */ - public void addMapping(SQLMapping sqlMapping) { - mvcEndpointMapping.addMapping(sqlMapping.getMapping(), sqlMapping.getRequestMethod(), - sqlMapping, sqlMapping.getExecuteMethod()); + public void removeMapping(String url, RequestMethod requestMethod) { + RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration(); + options.setPatternParser(new PathPatternParser()); + + RequestMappingInfo mappingInfo = RequestMappingInfo + .paths(url) + .methods(requestMethod) + .produces(MediaType.APPLICATION_JSON_VALUE) + .options(options) + .build(); + + handlerMapping.unregisterMapping(mappingInfo); } + + /** * test dynamic mapping * @param scriptMapping dynamic mapping **/ public void addMapping(ScriptMapping scriptMapping) { - mvcEndpointMapping.addMapping(scriptMapping.getMapping(), scriptMapping.getRequestMethod(), + this.addMapping(scriptMapping.getMapping(), scriptMapping.getRequestMethod(), scriptMapping, scriptMapping.getExecuteMethod()); } @@ -55,14 +87,5 @@ public Response test(ScriptMapping scriptMapping) { } - /** - * remove mapping - * @param mapping mapping - * @param requestMethod request method - */ - public void removeMapping(String mapping,RequestMethod requestMethod) { - mvcEndpointMapping.removeMapping(mapping,requestMethod); - } - } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java index c5a50577..738c9ff5 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java @@ -1,6 +1,6 @@ package com.codingapi.springboot.fast.mapping; -import com.codingapi.springboot.fast.dynamic.DynamicQuery; +import com.codingapi.springboot.fast.jpa.JPAQuery; import com.codingapi.springboot.fast.jdbc.JdbcQuery; import lombok.Getter; @@ -13,13 +13,13 @@ private MvcRunningContext() { } @Getter - private DynamicQuery dynamicQuery; + private JPAQuery JPAQuery; @Getter private JdbcQuery jdbcQuery; - public void init(DynamicQuery dynamicQuery, JdbcQuery jdbcQuery) { - this.dynamicQuery = dynamicQuery; + public void init(JPAQuery JPAQuery, JdbcQuery jdbcQuery) { + this.JPAQuery = JPAQuery; this.jdbcQuery = jdbcQuery; } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java deleted file mode 100644 index f8b72022..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/SQLMapping.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import com.codingapi.springboot.framework.dto.response.Response; -import com.codingapi.springboot.framework.dto.response.SingleResponse; -import lombok.Getter; -import lombok.Setter; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - - -@Getter -@Setter -public class SQLMapping extends BaseMapping{ - - private String sql; - private Class clazz; - private Object[] params; - private Type type; - - public SQLMapping(Type type,String mapping, RequestMethod requestMethod, String sql, Class clazz, Object[] params) { - super(mapping, requestMethod); - this.sql = sql; - this.clazz = clazz; - this.params = params; - this.type = type; - } - - public static SQLMapping jdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { - return new SQLMapping(Type.JDBC, mapping, requestMethod, sql, clazz, params); - } - - public static SQLMapping jdbcMapMapping(String mapping, RequestMethod requestMethod, String sql, Object... params) { - return new SQLMapping(Type.JDBC_MAP, mapping, requestMethod, sql, null, params); - } - - public static SQLMapping hqlMapping(String mapping, RequestMethod requestMethod, String sql, Class clazz, Object... params) { - return new SQLMapping(Type.HQL, mapping, requestMethod, sql, clazz, params); - } - - - enum Type { - JDBC, HQL, JDBC_MAP - } - - - @ResponseBody - public Response execute() { - return switch (type) { - case JDBC -> SingleResponse.of(MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params)); - case HQL -> SingleResponse.of(MvcRunningContext.getInstance().getDynamicQuery().listQuery(clazz, sql, params)); - case JDBC_MAP -> SingleResponse.of(MvcRunningContext.getInstance().getJdbcQuery().queryForList(sql, params)); - }; - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java index 4c1c434c..ab9db5fa 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java @@ -10,17 +10,22 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import java.lang.reflect.Method; import java.util.List; @Setter @Getter -public class ScriptMapping extends BaseMapping{ +public class ScriptMapping { + private String mapping; + private RequestMethod requestMethod; private String script; + public ScriptMapping(String mapping, RequestMethod requestMethod, String script) { - super(mapping, requestMethod); + this.mapping = mapping; + this.requestMethod = requestMethod; this.script = script; } @@ -42,6 +47,14 @@ public Response execute() { } + public Method getExecuteMethod() { + try { + return this.getClass().getDeclaredMethod("execute"); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/DataFastBeanDefinitionRegistrar.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/DataFastBeanDefinitionRegistrar.java deleted file mode 100644 index 0a733ab7..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/DataFastBeanDefinitionRegistrar.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.codingapi.springboot.fast.registrar; - -import com.codingapi.springboot.fast.annotation.FastController; -import com.codingapi.springboot.framework.registrar.RegisterBeanScanner; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; -import org.springframework.core.type.AnnotationMetadata; - -import java.util.Set; - -@Slf4j -@Configuration -public class DataFastBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { - - - @SneakyThrows - @Override - public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { - RegisterBeanScanner registerBeanScanner = new RegisterBeanScanner(importingClassMetadata, FastController.class); - Set> classSet = registerBeanScanner.findTypes(); - - //register bean - for (Class clazz : classSet) { - log.info("scanner @FastController class:{}", clazz); - MvcMappingRegistrar.classSet.add(clazz); - } - } - - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/MvcMappingRegistrar.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/MvcMappingRegistrar.java deleted file mode 100644 index e6a154b8..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/MvcMappingRegistrar.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.codingapi.springboot.fast.registrar; - -import com.codingapi.springboot.fast.annotation.FastMapping; -import com.codingapi.springboot.fast.exception.FastMappingErrorException; -import com.codingapi.springboot.fast.executor.JpaExecutor; -import com.codingapi.springboot.fast.executor.MvcMethodInterceptor; -import com.codingapi.springboot.fast.mapping.MvcEndpointMapping; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.aop.Advisor; -import org.springframework.aop.framework.AdvisedSupport; -import org.springframework.aop.framework.AopProxy; -import org.springframework.aop.framework.AopProxyFactory; -import org.springframework.aop.framework.DefaultAopProxyFactory; -import org.springframework.data.domain.Pageable; -import org.springframework.util.StringUtils; - -import java.lang.reflect.Method; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -@Slf4j -public class MvcMappingRegistrar { - protected final static Set> classSet = new HashSet<>(); - private final MvcEndpointMapping mvcEndpointMapping; - - private final AopProxyFactory proxyFactory; - - private final List advisors; - - private final MvcMethodInterceptor interceptor; - - public MvcMappingRegistrar(MvcEndpointMapping mvcEndpointMapping, - JpaExecutor jpaExecutor, - List advisors) { - this.mvcEndpointMapping = mvcEndpointMapping; - this.advisors = advisors; - this.interceptor = new MvcMethodInterceptor(jpaExecutor); - this.proxyFactory = new DefaultAopProxyFactory(); - } - - @SneakyThrows - public void registerMvcMapping() { - for (Class clazz : classSet) { - Method[] methods = clazz.getDeclaredMethods(); - for (Method method : methods) { - FastMapping fastMapping = method.getAnnotation(FastMapping.class); - if (verify(fastMapping, method)) { - AdvisedSupport advisedSupport = createAdvisedSupport(clazz); - AopProxy proxy = proxyFactory.createAopProxy(advisedSupport); - mvcEndpointMapping.addMapping(fastMapping.mapping(), fastMapping.method(), - proxy.getProxy(), method); - } - } - } - } - - private AdvisedSupport createAdvisedSupport(Class clazz) { - AdvisedSupport advisedSupport = new AdvisedSupport(clazz); - advisedSupport.setTarget(interceptor); - advisedSupport.addAdvisors(advisors); - advisedSupport.addAdvice(interceptor); - return advisedSupport; - } - - private boolean verify(FastMapping fastMapping, Method method) throws FastMappingErrorException { - if (fastMapping == null) { - return false; - } - - if (!StringUtils.hasText(fastMapping.mapping())) { - throw new FastMappingErrorException(String.format("fast method %s missing mapping .", - method.getName())); - } - - if (!StringUtils.hasText(fastMapping.value())) { - throw new FastMappingErrorException(String.format("fast mapping %s missing value .", - fastMapping.mapping())); - } - - Class[] parameterTypes = method.getParameterTypes(); - for (Class parameter : parameterTypes) { - if (Pageable.class.isAssignableFrom(parameter)) { - if (!StringUtils.hasText(fastMapping.countQuery())) { - throw new FastMappingErrorException(String.format("fast mapping %s missing countQuery .", - fastMapping.mapping())); - } - } - } - return true; - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java index e32789b4..46ec8a61 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java @@ -15,7 +15,7 @@ public static Object running(String script, MvcRunningContext context) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); ScriptRequest request = new ScriptRequest(attributes.getRequest()); binding.setVariable("$request", request); - binding.setVariable("$jpa", context.getDynamicQuery()); + binding.setVariable("$jpa", context.getJPAQuery()); binding.setVariable("$jdbc", context.getJdbcQuery()); GroovyShell groovyShell = new GroovyShell(binding); Script userScript = groovyShell.parse(script); diff --git a/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories b/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories index 53c30b31..837de477 100644 --- a/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories +++ b/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories @@ -1,4 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.codingapi.springboot.fast.DataFastConfiguration,\ -com.codingapi.springboot.fast.registrar.DataFastBeanDefinitionRegistrar,\ -com.codingapi.springboot.fast.dynamic.DynamicConfiguration \ No newline at end of file +com.codingapi.springboot.fast.jpa.JPAQueryConfiguration \ No newline at end of file diff --git a/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e8f74008..6e8c610d 100644 --- a/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,3 +1,2 @@ com.codingapi.springboot.fast.DataFastConfiguration -com.codingapi.springboot.fast.registrar.DataFastBeanDefinitionRegistrar -com.codingapi.springboot.fast.dynamic.DynamicConfiguration \ No newline at end of file +com.codingapi.springboot.fast.jpa.JPAQueryConfiguration \ No newline at end of file diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DataFastApplicationTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DataFastApplicationTest.java deleted file mode 100644 index 1870f2c4..00000000 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DataFastApplicationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.codingapi.springboot.fast; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@AutoConfigureMockMvc -@SpringBootTest -public class DataFastApplicationTest { - - @Autowired - private MockMvc mockMvc; - - @Test - void findAll() throws Exception { - mockMvc.perform(get("/demo/findAll").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); - } - - @Test - void findById() throws Exception { - mockMvc.perform(get("/demo/getById").param("id", "1").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); - } - - @Test - void findPage() throws Exception { - mockMvc.perform(get("/demo/findPage").param("pageSize", "20").param("current", "1").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); - } -} diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java index b4d02d16..18915797 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java @@ -1,6 +1,6 @@ package com.codingapi.springboot.fast.entity; -import com.codingapi.springboot.fast.sort.ISort; +import com.codingapi.springboot.fast.jpa.ISort; import lombok.Getter; import lombok.Setter; diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/query/FastDemoQuery.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/query/FastDemoQuery.java deleted file mode 100644 index 50dd5939..00000000 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/query/FastDemoQuery.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.codingapi.springboot.fast.query; - -import com.codingapi.springboot.fast.annotation.FastController; -import com.codingapi.springboot.fast.annotation.FastMapping; -import com.codingapi.springboot.fast.entity.Demo; -import com.codingapi.springboot.framework.dto.request.PageRequest; -import com.codingapi.springboot.framework.dto.response.MultiResponse; -import com.codingapi.springboot.framework.dto.response.SingleResponse; -import org.springframework.web.bind.annotation.RequestParam; - -@FastController -public interface FastDemoQuery { - - @FastMapping(value = "select d from Demo d", mapping = "/demo/findAll") - MultiResponse findAll(); - - @FastMapping(value = "select d from Demo d where d.id = ?1", mapping = "/demo/getById") - SingleResponse getById(@RequestParam("id") int id); - - @FastMapping(value = "select d from Demo d", countQuery = "select count(d) from Demo d", mapping = "/demo/findPage") - MultiResponse findPage(PageRequest pageRequest); - -} diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java index 9f5c76af..0d70d6e8 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java @@ -1,8 +1,8 @@ package com.codingapi.springboot.fast.repository; import com.codingapi.springboot.fast.entity.Demo; -import com.codingapi.springboot.fast.query.FastRepository; -import com.codingapi.springboot.fast.sort.SortRepository; +import com.codingapi.springboot.fast.jpa.FastRepository; +import com.codingapi.springboot.fast.jpa.SortRepository; public interface DemoRepository extends FastRepository, SortRepository { From 2b31922ab572bce42a7bd65034882ee6639173cb Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 21:24:32 +0800 Subject: [PATCH 17/29] remove id-generator --- pom.xml | 2 - springboot-starter-id-generator/pom.xml | 37 -------- .../generator/AutoConfiguration.java | 27 ------ .../springboot/generator/IdGenerate.java | 17 ---- .../generator/IdGeneratorContext.java | 33 ------- .../springboot/generator/dao/DbHelper.java | 76 --------------- .../springboot/generator/dao/IdKeyDao.java | 94 ------------------- .../springboot/generator/domain/IdKey.java | 33 ------- .../properties/GeneratorJdbcProperties.java | 29 ------ .../generator/service/IdGenerateService.java | 24 ----- .../main/resources/META-INF/spring.factories | 2 - ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../generator/IdGenerateServiceTest.java | 21 ----- .../generator/IdGeneratorApplication.java | 12 --- .../src/test/resources/application.properties | 1 - 15 files changed, 409 deletions(-) delete mode 100644 springboot-starter-id-generator/pom.xml delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/AutoConfiguration.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGenerate.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGeneratorContext.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/DbHelper.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/IdKeyDao.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/domain/IdKey.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/properties/GeneratorJdbcProperties.java delete mode 100644 springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/service/IdGenerateService.java delete mode 100644 springboot-starter-id-generator/src/main/resources/META-INF/spring.factories delete mode 100644 springboot-starter-id-generator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGenerateServiceTest.java delete mode 100644 springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGeneratorApplication.java delete mode 100644 springboot-starter-id-generator/src/test/resources/application.properties diff --git a/pom.xml b/pom.xml index 5d588354..ad8cec6e 100644 --- a/pom.xml +++ b/pom.xml @@ -245,7 +245,6 @@ springboot-starter springboot-starter-security-jwt springboot-starter-data-fast - springboot-starter-id-generator springboot-starter-persistence @@ -258,7 +257,6 @@ springboot-starter springboot-starter-security-jwt springboot-starter-data-fast - springboot-starter-id-generator springboot-starter-persistence diff --git a/springboot-starter-id-generator/pom.xml b/springboot-starter-id-generator/pom.xml deleted file mode 100644 index db0a2416..00000000 --- a/springboot-starter-id-generator/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - springboot-parent - com.codingapi.springboot - 3.1.7.dev - - 4.0.0 - - springboot-starter-id-generator - - - 17 - - - - - - org.xerial - sqlite-jdbc - - - - commons-dbutils - commons-dbutils - - - - org.springframework - spring-jdbc - - - - - \ No newline at end of file diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/AutoConfiguration.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/AutoConfiguration.java deleted file mode 100644 index e9a8b394..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/AutoConfiguration.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.codingapi.springboot.generator; - -import com.codingapi.springboot.generator.dao.IdKeyDao; -import com.codingapi.springboot.generator.properties.GeneratorJdbcProperties; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class AutoConfiguration { - - @Bean - @ConfigurationProperties(prefix = "codingapi.id.jdbc.generator") - public GeneratorJdbcProperties generatorJdbcProperties() { - return new GeneratorJdbcProperties(); - } - - @Bean(initMethod = "init") - @ConditionalOnMissingBean - public IdKeyDao idKeyDao(GeneratorJdbcProperties generatorJdbcProperties) { - IdKeyDao keyDao = new IdKeyDao(generatorJdbcProperties.openDataSource()); - IdGeneratorContext.getInstance().init(keyDao); - return keyDao; - } - -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGenerate.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGenerate.java deleted file mode 100644 index 972459a8..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGenerate.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.codingapi.springboot.generator; - -public interface IdGenerate { - - default long generateLongId() { - return IdGeneratorContext.getInstance().generateId(getClass()); - } - - default int generateIntId() { - return (int) IdGeneratorContext.getInstance().generateId(getClass()); - } - - default String generateStringId() { - return String.valueOf(IdGeneratorContext.getInstance().generateId(getClass())); - } - -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGeneratorContext.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGeneratorContext.java deleted file mode 100644 index c405ef30..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/IdGeneratorContext.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.codingapi.springboot.generator; - -import com.codingapi.springboot.generator.dao.IdKeyDao; -import com.codingapi.springboot.generator.service.IdGenerateService; - -public class IdGeneratorContext { - - private static IdGeneratorContext instance; - private IdGenerateService idGenerateService; - - private IdGeneratorContext() { - } - - public static IdGeneratorContext getInstance() { - if (instance == null) { - synchronized (IdGeneratorContext.class) { - if (instance == null) { - instance = new IdGeneratorContext(); - } - } - } - return instance; - } - - long generateId(Class clazz) { - return idGenerateService.generateId(clazz); - } - - void init(IdKeyDao idKeyDao) { - idGenerateService = new IdGenerateService(idKeyDao); - } - -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/DbHelper.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/DbHelper.java deleted file mode 100644 index 92b8191a..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/DbHelper.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.codingapi.springboot.generator.dao; - -import org.apache.commons.dbutils.QueryRunner; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - -public class DbHelper { - - private final DataSource dataSource; - private final QueryRunner queryRunner; - - - public DbHelper(DataSource dataSource) { - this.dataSource = dataSource; - this.queryRunner = new QueryRunner(); - } - - public void execute(IExecute execute) throws SQLException { - Connection connection = dataSource.getConnection(); - execute.execute(connection, queryRunner); - connection.close(); - } - - public T updateAndQuery(IUpdateAndQuery execute) throws SQLException { - Connection connection = dataSource.getConnection(); - connection.setAutoCommit(false); - T res = execute.updateAndQuery(connection, queryRunner); - connection.commit(); - connection.close(); - return res; - } - - public int update(IUpdate execute) throws SQLException { - Connection connection = dataSource.getConnection(); - connection.setAutoCommit(false); - int res = execute.update(connection, queryRunner); - connection.commit(); - connection.close(); - return res; - } - - public T query(IQuery execute) throws SQLException { - Connection connection = dataSource.getConnection(); - T res = execute.query(connection, queryRunner); - connection.close(); - return res; - } - - - interface IExecute { - default void execute(Connection connection, QueryRunner queryRunner) throws SQLException { - } - } - - - interface IUpdateAndQuery { - default T updateAndQuery(Connection connection, QueryRunner queryRunner) throws SQLException { - return null; - } - } - - interface IUpdate { - default int update(Connection connection, QueryRunner queryRunner) throws SQLException { - return 0; - } - } - - interface IQuery { - default T query(Connection connection, QueryRunner queryRunner) throws SQLException { - return null; - } - } - -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/IdKeyDao.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/IdKeyDao.java deleted file mode 100644 index 59332bc0..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/dao/IdKeyDao.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.codingapi.springboot.generator.dao; - -import com.codingapi.springboot.generator.domain.IdKey; -import lombok.SneakyThrows; -import org.apache.commons.dbutils.QueryRunner; -import org.apache.commons.dbutils.ResultSetHandler; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -public class IdKeyDao { - - private final DbHelper> dbHelper; - - private final ResultSetHandler> handler; - - public IdKeyDao(DataSource dataSource) { - this.dbHelper = new DbHelper<>(dataSource); - this.handler = rs -> { - List list = new ArrayList<>(); - while (rs.next()) { - IdKey generator = new IdKey(); - generator.setKey(rs.getString("TAG")); - generator.setId(rs.getInt("ID")); - generator.setUpdateTime(rs.getLong("UPDATE_TIME")); - list.add(generator); - } - return list; - }; - } - - @SneakyThrows - public void save(IdKey generator) { - dbHelper.update(new DbHelper.IUpdate() { - @Override - public int update(Connection connection, QueryRunner queryRunner) throws SQLException { - List list = queryRunner.query(connection, "SELECT * FROM ID_GENERATOR WHERE TAG = ?", handler, generator.getKey()); - if (list != null && list.size() > 0) { - return 0; - } - - String sql = "INSERT INTO ID_GENERATOR (ID, UPDATE_TIME, TAG) VALUES (?, ?, ?)"; - return queryRunner.update(connection, sql, generator.getId(), generator.getUpdateTime(), generator.getKey()); - } - }); - } - - - @SneakyThrows - public IdKey getByKey(String key) { - return dbHelper.query(new DbHelper.IQuery>() { - @Override - public List query(Connection connection, QueryRunner queryRunner) throws SQLException { - return queryRunner.query(connection, "SELECT * FROM ID_GENERATOR WHERE TAG = ?", handler, key); - } - }).stream().findFirst().orElse(null); - } - - - @SneakyThrows - public IdKey updateMaxId(IdKey generator) { - return dbHelper.updateAndQuery(new DbHelper.IUpdateAndQuery<>() { - @Override - public List updateAndQuery(Connection connection, QueryRunner queryRunner) throws SQLException { - queryRunner.update(connection, "UPDATE ID_GENERATOR SET ID = ID + 1 WHERE TAG = ?", generator.getKey()); - return queryRunner.query(connection, "SELECT * FROM ID_GENERATOR WHERE TAG = ?", handler, generator.getKey()); - } - }).stream().findFirst().orElse(null); - } - - - @SneakyThrows - public List findAll() throws SQLException { - return dbHelper.query(new DbHelper.IQuery<>() { - @Override - public List query(Connection connection, QueryRunner queryRunner) throws SQLException { - return queryRunner.query(connection, "SELECT * FROM ID_GENERATOR", handler); - } - }); - } - - private void init() throws SQLException { - dbHelper.execute(new DbHelper.IExecute() { - @Override - public void execute(Connection connection, QueryRunner queryRunner) throws SQLException { - String sql = "CREATE TABLE IF NOT EXISTS ID_GENERATOR (TAG TEXT NOT NULL, ID INTEGER NOT NULL, UPDATE_TIME INTEGER NOT NULL, PRIMARY KEY (TAG))"; - queryRunner.update(connection, sql); - } - }); - } -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/domain/IdKey.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/domain/IdKey.java deleted file mode 100644 index 0363383e..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/domain/IdKey.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.codingapi.springboot.generator.domain; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Setter -@Getter -@NoArgsConstructor -public class IdKey { - - private String key; - private long id; - private long updateTime; - - public IdKey(String key, long id) { - this.key = key; - this.id = id; - this.updateTime = System.currentTimeMillis(); - } - - public IdKey(String key) { - this.key = key; - this.id = 1; - this.updateTime = System.currentTimeMillis(); - } - - public IdKey(String key, long id, long updateTime) { - this.key = key; - this.id = id; - this.updateTime = updateTime; - } -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/properties/GeneratorJdbcProperties.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/properties/GeneratorJdbcProperties.java deleted file mode 100644 index 6d89224a..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/properties/GeneratorJdbcProperties.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.codingapi.springboot.generator.properties; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.jdbc.datasource.DriverManagerDataSource; - -import javax.sql.DataSource; - -@Setter -@Getter -public class GeneratorJdbcProperties { - - private String jdbcUrl = "jdbc:sqlite:db.db"; - - private String jdbcDriver = "org.sqlite.JDBC"; - - private String jdbcUsername = "sa"; - - private String jdbcPassword = "sa"; - - public DataSource openDataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(jdbcDriver); - dataSource.setUrl(jdbcUrl); - dataSource.setUsername(jdbcUsername); - dataSource.setPassword(jdbcPassword); - return dataSource; - } -} diff --git a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/service/IdGenerateService.java b/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/service/IdGenerateService.java deleted file mode 100644 index 9d7dc478..00000000 --- a/springboot-starter-id-generator/src/main/java/com/codingapi/springboot/generator/service/IdGenerateService.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.codingapi.springboot.generator.service; - -import com.codingapi.springboot.generator.dao.IdKeyDao; -import com.codingapi.springboot.generator.domain.IdKey; - -public class IdGenerateService { - - private final IdKeyDao keyDao; - - public IdGenerateService(IdKeyDao keyDao) { - this.keyDao = keyDao; - } - - public synchronized long generateId(Class clazz) { - IdKey idKey = keyDao.getByKey(clazz.getName()); - if (idKey == null) { - idKey = new IdKey(clazz.getName()); - keyDao.save(idKey); - } else { - keyDao.updateMaxId(idKey); - } - return idKey.getId(); - } -} diff --git a/springboot-starter-id-generator/src/main/resources/META-INF/spring.factories b/springboot-starter-id-generator/src/main/resources/META-INF/spring.factories deleted file mode 100644 index f30445ef..00000000 --- a/springboot-starter-id-generator/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.codingapi.springboot.generator.AutoConfiguration \ No newline at end of file diff --git a/springboot-starter-id-generator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/springboot-starter-id-generator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index c1aa4e07..00000000 --- a/springboot-starter-id-generator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -com.codingapi.springboot.generator.AutoConfiguration \ No newline at end of file diff --git a/springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGenerateServiceTest.java b/springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGenerateServiceTest.java deleted file mode 100644 index a2176a7c..00000000 --- a/springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGenerateServiceTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.codingapi.springboot.generator; - -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -@Slf4j -@SpringBootTest -class IdGenerateServiceTest { - - @Test - void generateId() { - for (int i = 0; i < 1000; i++) { - long id = IdGeneratorContext.getInstance().generateId(IdGenerateServiceTest.class); - log.info("id=>{}", id); - assertTrue(id > 0, "id generator error."); - } - } -} \ No newline at end of file diff --git a/springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGeneratorApplication.java b/springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGeneratorApplication.java deleted file mode 100644 index d7979615..00000000 --- a/springboot-starter-id-generator/src/test/java/com/codingapi/springboot/generator/IdGeneratorApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.codingapi.springboot.generator; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class IdGeneratorApplication { - - public static void main(String[] args) { - SpringApplication.run(IdGeneratorApplication.class, args); - } -} diff --git a/springboot-starter-id-generator/src/test/resources/application.properties b/springboot-starter-id-generator/src/test/resources/application.properties deleted file mode 100644 index 8a3b6d8a..00000000 --- a/springboot-starter-id-generator/src/test/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -codingapi.id.generator.jdbc-url=jdbc:h2:file:./test.db \ No newline at end of file From 6adfbf16bdd9a882b7000f054be534d4bec9ab5a Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 21:45:41 +0800 Subject: [PATCH 18/29] remove data-fast --- .../fast/DataFastConfiguration.java | 12 +++-- .../fast/jdbc/JdbcQueryConfiguration.java | 22 +++++++++ .../fast/jdbc/JdbcQueryContext.java | 23 +++++++++ .../fast/jdbc/JdbcQueryContextRegister.java | 16 +++++++ .../codingapi/springboot/fast/jpa/ISort.java | 8 ---- .../springboot/fast/jpa/SortRepository.java | 24 ---------- .../{ => repository}/DynamicRepository.java | 3 +- .../jpa/{ => repository}/FastRepository.java | 2 +- .../jpa/{ => repository}/QueryRequest.java | 2 +- .../fast/mapping/MvcMappingRegister.java | 31 +----------- .../fast/mapping/MvcRunningContext.java | 26 ---------- .../{mapping => script}/ScriptMapping.java | 19 ++++---- .../fast/script/ScriptMappingRegister.java | 47 +++++++++++++++++++ .../springboot/fast/script/ScriptRuntime.java | 17 +++++-- .../main/resources/META-INF/spring.factories | 3 +- ...ot.autoconfigure.AutoConfiguration.imports | 3 +- .../springboot/fast/DemoRepositoryTest.java | 25 ---------- .../springboot/fast/entity/Demo.java | 6 +-- .../fast/repository/DemoRepository.java | 5 +- .../fast/script/ScriptRuntimeTest.java | 7 ++- 20 files changed, 152 insertions(+), 149 deletions(-) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryConfiguration.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContext.java create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContextRegister.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/{ => repository}/DynamicRepository.java (94%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/{ => repository}/FastRepository.java (97%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/{ => repository}/QueryRequest.java (99%) delete mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/{mapping => script}/ScriptMapping.java (71%) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java index 50653d1a..d765dc4a 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java @@ -1,14 +1,13 @@ package com.codingapi.springboot.fast; -import com.codingapi.springboot.fast.jpa.JPAQuery; import com.codingapi.springboot.fast.manager.EntityManagerInitializer; import com.codingapi.springboot.fast.mapping.MvcMappingRegister; +import com.codingapi.springboot.fast.script.ScriptMappingRegister; import jakarta.persistence.EntityManager; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @@ -19,8 +18,8 @@ public class DataFastConfiguration { @Bean @ConditionalOnMissingBean - public MvcMappingRegister mvcMappingRegister(RequestMappingHandlerMapping handlerMapping, JPAQuery JPAQuery, JdbcTemplate jdbcTemplate) { - return new MvcMappingRegister(handlerMapping, JPAQuery, jdbcTemplate); + public MvcMappingRegister mvcMappingRegister(RequestMappingHandlerMapping handlerMapping) { + return new MvcMappingRegister(handlerMapping); } @@ -31,4 +30,9 @@ public EntityManagerInitializer entityManagerInitializer(EntityManager entityMan } + @Bean + public ScriptMappingRegister scriptMappingRegister(MvcMappingRegister mvcMappingRegister) { + return new ScriptMappingRegister(mvcMappingRegister); + } + } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryConfiguration.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryConfiguration.java new file mode 100644 index 00000000..aa05bd84 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryConfiguration.java @@ -0,0 +1,22 @@ +package com.codingapi.springboot.fast.jdbc; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; + + +@Configuration +public class JdbcQueryConfiguration { + + @Bean + public JdbcQuery jdbcQuery(JdbcTemplate jdbcTemplate) { + return new JdbcQuery(jdbcTemplate); + } + + @Bean + public JdbcQueryContextRegister jdbcQueryContextRegister(JdbcQuery jdbcQuery){ + return new JdbcQueryContextRegister(jdbcQuery); + } + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContext.java new file mode 100644 index 00000000..7aaa455e --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContext.java @@ -0,0 +1,23 @@ +package com.codingapi.springboot.fast.jdbc; + + +import lombok.Getter; + +public class JdbcQueryContext { + + @Getter + private static final JdbcQueryContext instance = new JdbcQueryContext(); + + private JdbcQueryContext() { + + } + + @Getter + private JdbcQuery jdbcQuery; + + void setJdbcQuery(JdbcQuery jdbcQuery) { + this.jdbcQuery = jdbcQuery; + } + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContextRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContextRegister.java new file mode 100644 index 00000000..47ab903d --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc/JdbcQueryContextRegister.java @@ -0,0 +1,16 @@ +package com.codingapi.springboot.fast.jdbc; + +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.InitializingBean; + +@AllArgsConstructor +public class JdbcQueryContextRegister implements InitializingBean { + + private JdbcQuery jdbcQuery; + + @Override + public void afterPropertiesSet() throws Exception { + JdbcQueryContext.getInstance().setJdbcQuery(jdbcQuery); + } + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java deleted file mode 100644 index 2826f64d..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/ISort.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.codingapi.springboot.fast.jpa; - -public interface ISort { - - Integer getSort(); - - void setSort(Integer sort); -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java deleted file mode 100644 index ed9d068a..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/SortRepository.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.codingapi.springboot.fast.jpa; - -import com.codingapi.springboot.framework.dto.request.PageRequest; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.repository.NoRepositoryBean; - -import java.util.ArrayList; -import java.util.List; - -@NoRepositoryBean -public interface SortRepository extends JpaRepository { - - - default void pageSort(PageRequest request, List ids) { - List list = new ArrayList<>(); - for (int i = 0; i < ids.size(); i++) { - ISort entity = getReferenceById(ids.get(i)); - entity.setSort(i + (request.getPageNumber() * request.getPageSize())); - list.add((T) entity); - } - saveAll(list); - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/DynamicRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java similarity index 94% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/DynamicRepository.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java index 30b65e5c..186f45a1 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/DynamicRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java @@ -1,5 +1,6 @@ -package com.codingapi.springboot.fast.jpa; +package com.codingapi.springboot.fast.jpa.repository; +import com.codingapi.springboot.fast.jpa.JpaQueryContext; import org.springframework.core.ResolvableType; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/FastRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java similarity index 97% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/FastRepository.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java index 657624bc..79ccec62 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/FastRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.jpa; +package com.codingapi.springboot.fast.jpa.repository; import com.codingapi.springboot.framework.dto.request.PageRequest; import jakarta.persistence.criteria.Order; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/QueryRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/QueryRequest.java similarity index 99% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/QueryRequest.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/QueryRequest.java index d5fdf57b..b8ca0ad6 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/QueryRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/QueryRequest.java @@ -1,4 +1,4 @@ -package com.codingapi.springboot.fast.jpa; +package com.codingapi.springboot.fast.jpa.repository; import com.codingapi.springboot.framework.dto.request.Filter; import com.codingapi.springboot.framework.dto.request.PageRequest; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java index 64deaf9b..dfe3ed39 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcMappingRegister.java @@ -1,11 +1,7 @@ package com.codingapi.springboot.fast.mapping; -import com.codingapi.springboot.fast.jpa.JPAQuery; -import com.codingapi.springboot.fast.jdbc.JdbcQuery; -import com.codingapi.springboot.framework.dto.response.Response; import lombok.AllArgsConstructor; import org.springframework.http.MediaType; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @@ -18,10 +14,6 @@ public class MvcMappingRegister { private final RequestMappingHandlerMapping handlerMapping; - public MvcMappingRegister(RequestMappingHandlerMapping handlerMapping, JPAQuery JPAQuery, JdbcTemplate jdbcTemplate) { - this.handlerMapping = handlerMapping; - MvcRunningContext.getInstance().init(JPAQuery, new JdbcQuery(jdbcTemplate)); - } /** * add mvc mapping @@ -48,6 +40,7 @@ public void addMapping(String url, RequestMethod requestMethod, Object handler, /** * remove mvc mapping + * * @param url mapping url * @param requestMethod request method */ @@ -66,26 +59,4 @@ public void removeMapping(String url, RequestMethod requestMethod) { } - - /** - * test dynamic mapping - * @param scriptMapping dynamic mapping - **/ - public void addMapping(ScriptMapping scriptMapping) { - this.addMapping(scriptMapping.getMapping(), scriptMapping.getRequestMethod(), - scriptMapping, scriptMapping.getExecuteMethod()); - } - - - /** - * test dynamic mapping - * @param scriptMapping dynamic mapping - * @return result - */ - public Response test(ScriptMapping scriptMapping) { - return scriptMapping.execute(); - } - - - } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java deleted file mode 100644 index 738c9ff5..00000000 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcRunningContext.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.codingapi.springboot.fast.mapping; - -import com.codingapi.springboot.fast.jpa.JPAQuery; -import com.codingapi.springboot.fast.jdbc.JdbcQuery; -import lombok.Getter; - -public class MvcRunningContext { - - @Getter - private final static MvcRunningContext instance = new MvcRunningContext(); - - private MvcRunningContext() { - } - - @Getter - private JPAQuery JPAQuery; - @Getter - private JdbcQuery jdbcQuery; - - - public void init(JPAQuery JPAQuery, JdbcQuery jdbcQuery) { - this.JPAQuery = JPAQuery; - this.jdbcQuery = jdbcQuery; - } - -} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java similarity index 71% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java index ab9db5fa..f3b61f0b 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/ScriptMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java @@ -1,6 +1,5 @@ -package com.codingapi.springboot.fast.mapping; +package com.codingapi.springboot.fast.script; -import com.codingapi.springboot.fast.script.ScriptRuntime; import com.codingapi.springboot.framework.dto.response.MultiResponse; import com.codingapi.springboot.framework.dto.response.Response; import com.codingapi.springboot.framework.dto.response.SingleResponse; @@ -30,16 +29,15 @@ public ScriptMapping(String mapping, RequestMethod requestMethod, String script) } @ResponseBody - public Response execute() { - MvcRunningContext context = MvcRunningContext.getInstance(); - Object result = ScriptRuntime.running(script,context); - if(result instanceof List || result.getClass().isArray()){ + Response execute() { + Object result = ScriptRuntime.running(script); + if (result instanceof List || result.getClass().isArray()) { return SingleResponse.of(result); - }else{ - if(result instanceof MultiResponse){ - return (MultiResponse)result; + } else { + if (result instanceof MultiResponse) { + return (MultiResponse) result; } - if(result instanceof Page){ + if (result instanceof Page) { return MultiResponse.of((Page) result); } return SingleResponse.of(result); @@ -56,5 +54,4 @@ public Method getExecuteMethod() { } - } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java new file mode 100644 index 00000000..668c31e5 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java @@ -0,0 +1,47 @@ +package com.codingapi.springboot.fast.script; + +import com.codingapi.springboot.fast.mapping.MvcMappingRegister; +import com.codingapi.springboot.framework.dto.response.Response; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RequestMethod; + +@AllArgsConstructor +public class ScriptMappingRegister { + + private final MvcMappingRegister mappingRegister; + + /** + * test dynamic mapping + * + * @param scriptMapping dynamic mapping + **/ + public void addMapping(ScriptMapping scriptMapping) { + mappingRegister.addMapping(scriptMapping.getMapping(), scriptMapping.getRequestMethod(), + scriptMapping, scriptMapping.getExecuteMethod()); + } + + + /** + * test dynamic mapping + * + * @param scriptMapping dynamic mapping + * @return result + */ + public Response test(ScriptMapping scriptMapping) { + return scriptMapping.execute(); + } + + + /** + * remove mvc mapping + * + * @param url mapping url + * @param requestMethod request method + */ + public void removeMapping(String url, RequestMethod requestMethod){ + mappingRegister.removeMapping(url, requestMethod); + } + + + +} diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java index 46ec8a61..2b5a63ba 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptRuntime.java @@ -1,6 +1,9 @@ package com.codingapi.springboot.fast.script; -import com.codingapi.springboot.fast.mapping.MvcRunningContext; +import com.codingapi.springboot.fast.jdbc.JdbcQuery; +import com.codingapi.springboot.fast.jdbc.JdbcQueryContext; +import com.codingapi.springboot.fast.jpa.JPAQuery; +import com.codingapi.springboot.fast.jpa.JpaQueryContext; import groovy.lang.Binding; import groovy.lang.GroovyShell; import groovy.lang.Script; @@ -10,13 +13,17 @@ public class ScriptRuntime { - public static Object running(String script, MvcRunningContext context) { + static Object running(String script) { Binding binding = new Binding(); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); - ScriptRequest request = new ScriptRequest(attributes.getRequest()); + ScriptRequest request = new ScriptRequest(attributes.getRequest()); + JdbcQuery jdbcQuery = JdbcQueryContext.getInstance().getJdbcQuery(); + JPAQuery jpaQuery = JpaQueryContext.getInstance().getJPAQuery(); + binding.setVariable("$request", request); - binding.setVariable("$jpa", context.getJPAQuery()); - binding.setVariable("$jdbc", context.getJdbcQuery()); + binding.setVariable("$jpa", jpaQuery); + binding.setVariable("$jdbc", jdbcQuery); + GroovyShell groovyShell = new GroovyShell(binding); Script userScript = groovyShell.parse(script); return userScript.run(); diff --git a/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories b/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories index 837de477..f2d11256 100644 --- a/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories +++ b/springboot-starter-data-fast/src/main/resources/META-INF/spring.factories @@ -1,3 +1,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.codingapi.springboot.fast.DataFastConfiguration,\ -com.codingapi.springboot.fast.jpa.JPAQueryConfiguration \ No newline at end of file +com.codingapi.springboot.fast.jpa.JPAQueryConfiguration,\ +com.codingapi.springboot.fast.jdbc.JdbcQueryConfiguration \ No newline at end of file diff --git a/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 6e8c610d..68b400af 100644 --- a/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/springboot-starter-data-fast/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,2 +1,3 @@ com.codingapi.springboot.fast.DataFastConfiguration -com.codingapi.springboot.fast.jpa.JPAQueryConfiguration \ No newline at end of file +com.codingapi.springboot.fast.jpa.JPAQueryConfiguration +com.codingapi.springboot.fast.jdbc.JdbcQueryConfiguration \ No newline at end of file diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java index cc62e0f5..515c5550 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java @@ -11,9 +11,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort; -import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -178,27 +176,4 @@ void sortQuery() { assertEquals(2, page.getTotalElements()); } - - @Test - @Transactional - void pageSort() { - demoRepository.deleteAll(); - Demo demo1 = new Demo(); - demo1.setName("123"); - demoRepository.save(demo1); - - Demo demo2 = new Demo(); - demo2.setName("456"); - demoRepository.save(demo2); - - List ids = Arrays.asList(demo1.getId(), demo2.getId()); - System.out.println(ids); - demoRepository.pageSort(PageRequest.of(1, 10), ids); - - Demo newDemo1 = demoRepository.getReferenceById(demo1.getId()); - Demo newDemo2 = demoRepository.getReferenceById(demo2.getId()); - - assertEquals(newDemo2.getSort(), 1); - assertEquals(newDemo1.getSort(), 0); - } } diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java index 18915797..f88fe8fb 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/entity/Demo.java @@ -1,10 +1,8 @@ package com.codingapi.springboot.fast.entity; -import com.codingapi.springboot.fast.jpa.ISort; +import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; - -import jakarta.persistence.*; import lombok.ToString; @Setter @@ -12,7 +10,7 @@ @Entity @Table(name = "t_demo") @ToString -public class Demo implements ISort { +public class Demo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java index 0d70d6e8..30a688b1 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/repository/DemoRepository.java @@ -1,9 +1,8 @@ package com.codingapi.springboot.fast.repository; import com.codingapi.springboot.fast.entity.Demo; -import com.codingapi.springboot.fast.jpa.FastRepository; -import com.codingapi.springboot.fast.jpa.SortRepository; +import com.codingapi.springboot.fast.jpa.repository.FastRepository; -public interface DemoRepository extends FastRepository, SortRepository { +public interface DemoRepository extends FastRepository { } diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java index 5f364ff8..19e758db 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/script/ScriptRuntimeTest.java @@ -1,17 +1,16 @@ package com.codingapi.springboot.fast.script; -import com.codingapi.springboot.fast.mapping.MvcRunningContext; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; @SpringBootTest class ScriptRuntimeTest { @Test void running() { - Object res = ScriptRuntime.running("return 1", MvcRunningContext.getInstance()); - assertEquals(1,res); + Object res = ScriptRuntime.running("return 1"); + assertEquals(1, res); } } \ No newline at end of file From 5fc6e5f5a8e3c5f05574401d7c501aca9109e007 Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 22:00:30 +0800 Subject: [PATCH 19/29] remove data-fast --- .../springboot/fast/script/ScriptMapping.java | 2 +- .../framework/dto/request/IdRequest.java | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/IdRequest.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java index f3b61f0b..bdcb54ca 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java @@ -45,7 +45,7 @@ Response execute() { } - public Method getExecuteMethod() { + Method getExecuteMethod() { try { return this.getClass().getDeclaredMethod("execute"); } catch (NoSuchMethodException e) { diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/IdRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/IdRequest.java new file mode 100644 index 00000000..b325423e --- /dev/null +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/IdRequest.java @@ -0,0 +1,33 @@ +package com.codingapi.springboot.framework.dto.request; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class IdRequest { + + private String id; + + public String getStringId(){ + return id; + } + + public int getIntId(){ + return Integer.parseInt(id); + } + + public Long getLongId(){ + return Long.parseLong(id); + } + + public float getFloatId(){ + return Float.parseFloat(id); + } + + public double getDoubleId(){ + return Double.parseDouble(id); + } + + +} From 385c944dcbf0499da7b249e77148ff22638f25d5 Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 22:52:53 +0800 Subject: [PATCH 20/29] remove --- pom.xml | 4 - springboot-starter-persistence/pom.xml | 34 ----- .../persistence/AutoConfiguration.java | 17 --- .../persistence/DomainPersistence.java | 16 -- .../jdbc/JdbcAutoConfiguration.java | 32 ---- .../jdbc/executor/JdbcSchemaExecutor.java | 22 --- .../jdbc/impl/JdbcDomainPersistence.java | 90 ----------- .../jdbc/impl/JdbcSchemaFactory.java | 14 -- .../jdbc/schema/JdbcBuildSchema.java | 35 ----- .../jdbc/schema/JdbcDeleteSchema.java | 16 -- .../jdbc/schema/JdbcSaveSchema.java | 34 ----- .../persistence/jdbc/schema/JdbcSchema.java | 35 ----- .../jdbc/schema/JdbcSearchSchema.java | 18 --- .../jdbc/schema/JdbcUpdateSchema.java | 25 --- .../persistence/property/BeanProperty.java | 142 ------------------ .../persistence/property/SchemaProperty.java | 58 ------- .../register/DomainClassRegister.java | 38 ----- .../persistence/scanner/SchemaContext.java | 33 ---- .../persistence/scanner/SchemaScanner.java | 35 ----- .../persistence/schema/BuildSchema.java | 14 -- .../persistence/schema/DeleteSchema.java | 14 -- .../persistence/schema/SaveSchema.java | 37 ----- .../springboot/persistence/schema/Schema.java | 39 ----- .../persistence/schema/SearchSchema.java | 21 --- .../persistence/schema/UpdateSchema.java | 29 ---- .../schema/executor/SchemaExecutor.java | 9 -- .../schema/factory/SchemaFactory.java | 8 - .../main/resources/META-INF/spring.factories | 3 - ...ot.autoconfigure.AutoConfiguration.imports | 2 - .../example/demo/PersistenceApplication.java | 12 -- .../java/com/example/demo/domain/Demo.java | 14 -- .../example/demo/register/DomainRegister.java | 15 -- .../demo/repository/DemoRepository.java | 38 ----- .../demo/repository/DemoRepositoryTests.java | 62 -------- .../src/test/resources/application.properties | 8 - springboot-starter/pom.xml | 5 + 36 files changed, 5 insertions(+), 1023 deletions(-) delete mode 100644 springboot-starter-persistence/pom.xml delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java delete mode 100644 springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java delete mode 100644 springboot-starter-persistence/src/main/resources/META-INF/spring.factories delete mode 100644 springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java delete mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java delete mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java delete mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java delete mode 100644 springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java delete mode 100644 springboot-starter-persistence/src/test/resources/application.properties diff --git a/pom.xml b/pom.xml index ad8cec6e..b8ee7f1d 100644 --- a/pom.xml +++ b/pom.xml @@ -245,7 +245,6 @@ springboot-starter springboot-starter-security-jwt springboot-starter-data-fast - springboot-starter-persistence @@ -257,7 +256,6 @@ springboot-starter springboot-starter-security-jwt springboot-starter-data-fast - springboot-starter-persistence @@ -307,8 +305,6 @@ springboot-starter springboot-starter-security-jwt springboot-starter-data-fast - springboot-starter-id-generator - springboot-starter-persistence diff --git a/springboot-starter-persistence/pom.xml b/springboot-starter-persistence/pom.xml deleted file mode 100644 index 7cfb2ffe..00000000 --- a/springboot-starter-persistence/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - springboot-parent - com.codingapi.springboot - 3.1.7.dev - - 4.0.0 - - springboot-starter-persistence - - - 17 - - - - - - org.springframework.boot - spring-boot-starter-jdbc - provided - - - - com.mysql - mysql-connector-j - test - - - - - \ No newline at end of file diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java deleted file mode 100644 index 2803a848..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/AutoConfiguration.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.codingapi.springboot.persistence; - -import com.codingapi.springboot.persistence.scanner.SchemaScanner; -import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; -import org.springframework.beans.factory.annotation.Configurable; -import org.springframework.context.annotation.Bean; - -@Configurable -public class AutoConfiguration { - - @Bean - public SchemaScanner domainScanner(SchemaExecutor schemaExecutor, SchemaFactory schemaFactory) { - return new SchemaScanner(schemaExecutor, schemaFactory); - } - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java deleted file mode 100644 index d2ad6bac..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/DomainPersistence.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.codingapi.springboot.persistence; - -import java.util.List; - -public interface DomainPersistence { - - void save(Object domain); - - T get(Class domainClass, Object id); - - void delete(Class domainClass,Object id); - - void update(Object domain); - - List find(Class domainClass, String schema, Object... fields); -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java deleted file mode 100644 index 74c386fc..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/JdbcAutoConfiguration.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc; - -import com.codingapi.springboot.persistence.DomainPersistence; -import com.codingapi.springboot.persistence.jdbc.executor.JdbcSchemaExecutor; -import com.codingapi.springboot.persistence.jdbc.impl.JdbcDomainPersistence; -import com.codingapi.springboot.persistence.jdbc.impl.JdbcSchemaFactory; -import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; -import org.springframework.beans.factory.annotation.Configurable; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; -import org.springframework.jdbc.core.JdbcTemplate; - -@ConditionalOnClass(JdbcTemplate.class) -@Configurable -public class JdbcAutoConfiguration { - - @Bean - public SchemaExecutor schemaExecutor(JdbcTemplate jdbcTemplate) { - return new JdbcSchemaExecutor(jdbcTemplate); - } - - @Bean - public DomainPersistence domainPersistence(JdbcTemplate jdbcTemplate) { - return new JdbcDomainPersistence(jdbcTemplate); - } - - @Bean - public SchemaFactory schemaFactory() { - return new JdbcSchemaFactory(); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java deleted file mode 100644 index 8270eb9e..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/executor/JdbcSchemaExecutor.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.executor; - -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import lombok.AllArgsConstructor; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Repository; - -@Repository -@AllArgsConstructor -public class JdbcSchemaExecutor implements SchemaExecutor { - - private final JdbcTemplate jdbcTemplate; - - - @Override - public void create(Schema schema) { - jdbcTemplate.execute(schema.buildSchema().schema()); - } - - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java deleted file mode 100644 index c2dc5d6f..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcDomainPersistence.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.impl; - -import com.codingapi.springboot.persistence.DomainPersistence; -import com.codingapi.springboot.persistence.scanner.SchemaContext; -import com.codingapi.springboot.persistence.schema.SaveSchema; -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.SearchSchema; -import com.codingapi.springboot.persistence.schema.UpdateSchema; -import lombok.AllArgsConstructor; -import org.springframework.dao.EmptyResultDataAccessException; -import org.springframework.jdbc.core.BeanPropertyRowMapper; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.GeneratedKeyHolder; -import org.springframework.jdbc.support.KeyHolder; - -import java.sql.PreparedStatement; -import java.sql.Statement; -import java.util.List; - -@AllArgsConstructor -public class JdbcDomainPersistence implements DomainPersistence { - - private final JdbcTemplate jdbcTemplate; - - @Override - public void save(Object domain) { - Schema schema = SchemaContext.getInstance().getSchema(domain.getClass()); - if (schema != null) { - SaveSchema saveSchema = schema.saveSchema(); - if (schema.getSchemaProperty().hasIdValue(domain)) { - jdbcTemplate.update(saveSchema.schema(), saveSchema.getSaveValues(domain)); - } else { - KeyHolder keyHolder = new GeneratedKeyHolder(); - jdbcTemplate.update(con -> { - PreparedStatement ps = con.prepareStatement(saveSchema.schema(false), Statement.RETURN_GENERATED_KEYS); - int index = 1; - for (Object value : saveSchema.getSaveValues(domain, false)) { - ps.setObject(index++, value); - } - return ps; - }, keyHolder); - schema.getSchemaProperty().setIdValue(domain, keyHolder.getKey()); - } - } - } - - @Override - public T get(Class domainClass, Object id) { - Schema schema = SchemaContext.getInstance().getSchema(domainClass); - if (schema != null) { - SearchSchema searchSchema = schema.searchSchema(); - String sql = searchSchema.schema(); - try { - return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(domainClass)); - } catch (EmptyResultDataAccessException e) { - // Handle the case where no results are found or rethrow a custom exception - return null; - } - } - return null; - } - - @Override - public void delete(Class domainClazz, Object id) { - Schema schema = SchemaContext.getInstance().getSchema(domainClazz); - if (schema != null) { - String sql = schema.deleteSchema().schema(); - jdbcTemplate.update(sql, id); - } - } - - @Override - public void update(Object domain) { - Schema schema = SchemaContext.getInstance().getSchema(domain.getClass()); - if (schema != null) { - UpdateSchema updateSchema = schema.updateSchema(); - jdbcTemplate.update(updateSchema.schema(), updateSchema.getUpdateValues(domain)); - } - } - - - @Override - public List find(Class domainClass, String sql, Object... fields) { - Schema schema = SchemaContext.getInstance().getSchema(domainClass); - if (schema != null) { - return jdbcTemplate.query(sql, fields, new BeanPropertyRowMapper<>(domainClass)); - } - return null; - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java deleted file mode 100644 index 415e96b6..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/impl/JdbcSchemaFactory.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.impl; - -import com.codingapi.springboot.persistence.jdbc.schema.JdbcSchema; -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; - -public class JdbcSchemaFactory implements SchemaFactory { - - @Override - public Schema getSchema(Class domainClass) { - return new JdbcSchema(domainClass); - } - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java deleted file mode 100644 index 1303bd5a..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcBuildSchema.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.schema; - -import com.codingapi.springboot.persistence.schema.BuildSchema; -import com.codingapi.springboot.persistence.property.BeanProperty; -import com.codingapi.springboot.persistence.schema.Schema; - -import java.util.List; - -public class JdbcBuildSchema extends BuildSchema { - - public JdbcBuildSchema(Schema schema) { - super(schema); - } - - @Override - public String schema() { - StringBuilder sql = new StringBuilder(); - sql.append("CREATE TABLE IF NOT EXISTS "); - sql.append(property.getSchemaName()); - sql.append(" ("); - sql.append("id INT PRIMARY KEY AUTO_INCREMENT,"); - List properties = property.getProperties(false); - for (int i = 0; i < properties.size(); i++) { - BeanProperty beanProperty = properties.get(i); - sql.append(beanProperty.getName()); - sql.append(" "); - sql.append(beanProperty.getJdbcType()); - if (i != properties.size() - 1) { - sql.append(", "); - } - } - sql.append(")"); - return sql.toString(); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java deleted file mode 100644 index 328ca97e..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcDeleteSchema.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.schema; - -import com.codingapi.springboot.persistence.schema.DeleteSchema; -import com.codingapi.springboot.persistence.schema.Schema; - -public class JdbcDeleteSchema extends DeleteSchema { - - public JdbcDeleteSchema(Schema schema) { - super(schema); - } - - @Override - public String schema() { - return "DELETE FROM " + property.getSchemaName() + " WHERE id = ?"; - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java deleted file mode 100644 index 59586d04..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSaveSchema.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.schema; - -import com.codingapi.springboot.persistence.property.BeanProperty; -import com.codingapi.springboot.persistence.schema.SaveSchema; -import com.codingapi.springboot.persistence.schema.Schema; - -public class JdbcSaveSchema extends SaveSchema { - - public JdbcSaveSchema(Schema schema) { - super(schema); - } - - @Override - public String schema(boolean hasId) { - StringBuilder sql = new StringBuilder(); - sql.append("INSERT INTO "); - sql.append(property.getSchemaName()); - sql.append(" ("); - for (BeanProperty beanProperty : property.getProperties(hasId)) { - sql.append(beanProperty.getName()); - sql.append(", "); - } - sql.delete(sql.length() - 2, sql.length()); - sql.append(") VALUES ("); - for (BeanProperty beanProperty : property.getProperties(hasId)) { - sql.append("?, "); - } - sql.delete(sql.length() - 2, sql.length()); - sql.append(")"); - return sql.toString(); - } - - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java deleted file mode 100644 index fbe12dc9..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSchema.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.schema; - -import com.codingapi.springboot.persistence.schema.*; - -public class JdbcSchema extends Schema { - - public JdbcSchema(Class domainClass) { - super(domainClass); - } - - @Override - public BuildSchema buildSchema() { - return new JdbcBuildSchema(this); - } - - @Override - public SaveSchema saveSchema() { - return new JdbcSaveSchema(this); - } - - @Override - public SearchSchema searchSchema() { - return new JdbcSearchSchema(this); - } - - @Override - public DeleteSchema deleteSchema() { - return new JdbcDeleteSchema(this); - } - - @Override - public UpdateSchema updateSchema() { - return new JdbcUpdateSchema(this); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java deleted file mode 100644 index 3b75fa10..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcSearchSchema.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.schema; - -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.SearchSchema; - -public class JdbcSearchSchema extends SearchSchema { - - public JdbcSearchSchema(Schema schema) { - super(schema); - } - - @Override - public String schema() { - return "SELECT * FROM " + property.getSchemaName() + " WHERE id = ?"; - } - - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java deleted file mode 100644 index c6d012a6..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/jdbc/schema/JdbcUpdateSchema.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.codingapi.springboot.persistence.jdbc.schema; - -import com.codingapi.springboot.persistence.property.BeanProperty; -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.UpdateSchema; - -public class JdbcUpdateSchema extends UpdateSchema { - - public JdbcUpdateSchema(Schema schema) { - super(schema); - } - - @Override - public String schema() { - StringBuilder sql = new StringBuilder(); - sql.append("UPDATE ").append(property.getSchemaName()).append(" SET "); - for (BeanProperty property : property.getProperties(false)) { - sql.append(property.getName()).append(" = ?, "); - } - sql.delete(sql.length() - 2, sql.length()); - sql.append(" WHERE id = ?"); - return sql.toString(); - } - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java deleted file mode 100644 index 79bb3b2c..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/BeanProperty.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.codingapi.springboot.persistence.property; - -import lombok.extern.slf4j.Slf4j; -import org.yaml.snakeyaml.introspector.Property; - -@Slf4j -public class BeanProperty { - - private final Property property; - - public BeanProperty(Property property) { - this.property = property; - } - - public boolean hasIdValue(Object domain) { - if (property.getType().equals(int.class)) - return property.get(domain) != null && (int) property.get(domain) > 0; - else if (property.getType().equals(long.class)) - return property.get(domain) != null && (long) property.get(domain) > 0; - else if (property.getType().equals(double.class)) - return property.get(domain) != null && (double) property.get(domain) > 0; - else if (property.getType().equals(float.class)) - return property.get(domain) != null && (float) property.get(domain) > 0; - else if (property.getType().equals(short.class)) - return property.get(domain) != null && (short) property.get(domain) > 0; - else if (property.getType().equals(byte.class)) - return property.get(domain) != null && (byte) property.get(domain) > 0; - else if (property.getType().equals(boolean.class)) - return property.get(domain) != null && (boolean) property.get(domain); - else if (property.getType().equals(Integer.class)) - return property.get(domain) != null && (Integer) property.get(domain) > 0; - else if (property.getType().equals(Long.class)) - return property.get(domain) != null && (Long) property.get(domain) > 0; - else if (property.getType().equals(Double.class)) - return property.get(domain) != null && (Double) property.get(domain) > 0; - else if (property.getType().equals(Float.class)) - return property.get(domain) != null && (Float) property.get(domain) > 0; - else if (property.getType().equals(Short.class)) - return property.get(domain) != null && (Short) property.get(domain) > 0; - else if (property.getType().equals(Byte.class)) - return property.get(domain) != null && (Byte) property.get(domain) > 0; - else if (property.getType().equals(Boolean.class)) - return property.get(domain) != null && (Boolean) property.get(domain); - else if (property.getType().equals(String.class)) - return property.get(domain) != null && !((String) property.get(domain)).isEmpty(); - else if (property.getType().equals(Object.class)) - return property.get(domain) != null; - else - throw new RuntimeException("not support type"); - } - - - public void setIdValue(Object domain, Number key) { - try { - if (property.getType().equals(int.class)) - property.set(domain, key.intValue()); - else if (property.getType().equals(long.class)) - property.set(domain, key.longValue()); - else if (property.getType().equals(double.class)) - property.set(domain, key.doubleValue()); - else if (property.getType().equals(float.class)) - property.set(domain, key.floatValue()); - else if (property.getType().equals(short.class)) - property.set(domain, key.shortValue()); - else if (property.getType().equals(byte.class)) - property.set(domain, key.byteValue()); - else if (property.getType().equals(boolean.class)) - property.set(domain, key.byteValue()); - else if (property.getType().equals(Integer.class)) - property.set(domain, key.intValue()); - else if (property.getType().equals(Long.class)) - property.set(domain, key.longValue()); - else if (property.getType().equals(Double.class)) - property.set(domain, key.doubleValue()); - else if (property.getType().equals(Float.class)) - property.set(domain, key.floatValue()); - else if (property.getType().equals(Short.class)) - property.set(domain, key.shortValue()); - else if (property.getType().equals(Byte.class)) - property.set(domain, key.byteValue()); - else if (property.getType().equals(Boolean.class)) - property.set(domain, key.byteValue()); - else if (property.getType().equals(String.class)) - property.set(domain, key.toString()); - else if (property.getType().equals(Object.class)) - property.set(domain, key); - } catch (Exception e) { - log.error("setIdValue error", e); - } - } - - - public String getName() { - return property.getName(); - } - - public Object get(Object domain) { - try { - return property.get(domain); - } catch (Exception e) { - log.error("get error", e); - return null; - } - } - - public String getJdbcType(){ - if (property.getType().equals(int.class)) - return "INT"; - else if (property.getType().equals(long.class)) - return "BIGINT"; - else if (property.getType().equals(double.class)) - return "DOUBLE"; - else if (property.getType().equals(float.class)) - return "FLOAT"; - else if (property.getType().equals(short.class)) - return "SMALLINT"; - else if (property.getType().equals(byte.class)) - return "TINYINT"; - else if (property.getType().equals(boolean.class)) - return "BOOLEAN"; - else if (property.getType().equals(Integer.class)) - return "INT"; - else if (property.getType().equals(Long.class)) - return "BIGINT"; - else if (property.getType().equals(Double.class)) - return "DOUBLE"; - else if (property.getType().equals(Float.class)) - return "FLOAT"; - else if (property.getType().equals(Short.class)) - return "SMALLINT"; - else if (property.getType().equals(Byte.class)) - return "TINYINT"; - else if (property.getType().equals(Boolean.class)) - return "BOOLEAN"; - else if (property.getType().equals(String.class)) - return "VARCHAR(255)"; - else if (property.getType().equals(Object.class)) - return "VARCHAR(255)"; - else - throw new RuntimeException("not support type"); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java deleted file mode 100644 index 3ca946b0..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/property/SchemaProperty.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.codingapi.springboot.persistence.property; - -import lombok.Getter; -import org.yaml.snakeyaml.introspector.PropertyUtils; - -import java.util.List; -import java.util.stream.Collectors; - - -public class SchemaProperty { - - private final List properties; - @Getter - private final String schemaName; - @Getter - private final BeanProperty idBeanProperty; - - public SchemaProperty(Class domainClazz) { - PropertyUtils propertyUtils = new PropertyUtils(); - propertyUtils.setSkipMissingProperties(true); - this.properties = propertyUtils.getProperties(domainClazz).stream() - .map(BeanProperty::new).collect(Collectors.toList()); - this.idBeanProperty = new BeanProperty(propertyUtils.getProperty(domainClazz, "id")); - this.schemaName = domainClazz.getSimpleName(); - } - - - public List getProperties(boolean hasId) { - if (hasId) { - return properties; - } else { - return properties.stream() - .filter(beanProperty -> !beanProperty.getName().equals("id")) - .collect(Collectors.toList()); - } - } - - public List getProperties() { - return getProperties(true); - } - - public boolean hasIdValue(Object domain) { - return idBeanProperty.hasIdValue(domain); - } - - public void setIdValue(Object domain, Number key) { - idBeanProperty.setIdValue(domain, key); - } - - public boolean hasIdProperty() { - for (BeanProperty property : properties) { - if (property.getName().equals("id")) { - return true; - } - } - return false; - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java deleted file mode 100644 index 7ca5bc4d..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/register/DomainClassRegister.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.codingapi.springboot.persistence.register; - -import lombok.Getter; - -import java.util.ArrayList; -import java.util.List; - -@Getter -public class DomainClassRegister { - - private final List> classes; - - private final static DomainClassRegister INSTANCE = new DomainClassRegister(); - - private DomainClassRegister() { - this.classes = new ArrayList<>(); - } - - public DomainClassRegister register(Class domainClass) { - this.classes.add(domainClass); - return this; - } - - public void register(Class... domainClasses) { - this.classes.addAll(List.of(domainClasses)); - } - - public boolean supports(Class domainClass) { - return this.classes.stream() - .anyMatch(clazz -> clazz.equals(domainClass)); - - } - - public static DomainClassRegister getInstance() { - return INSTANCE; - } - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java deleted file mode 100644 index 865a9a2a..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaContext.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.codingapi.springboot.persistence.scanner; - -import com.codingapi.springboot.persistence.schema.Schema; -import lombok.Getter; - -import java.util.ArrayList; -import java.util.List; - -public class SchemaContext { - - private final static SchemaContext INSTANCE = new SchemaContext(); - - private final List schemas; - - private SchemaContext() { - this.schemas = new ArrayList<>(); - } - - public void register(Schema schema) { - this.schemas.add(schema); - } - - public Schema getSchema(Class domainClass) { - return schemas.stream() - .filter(schema -> schema.getDomainClass().equals(domainClass)) - .findFirst() - .orElseThrow(() -> new RuntimeException("schema not found")); - } - - public static SchemaContext getInstance() { - return INSTANCE; - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java deleted file mode 100644 index f798a497..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/scanner/SchemaScanner.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.codingapi.springboot.persistence.scanner; - -import com.codingapi.springboot.persistence.register.DomainClassRegister; -import com.codingapi.springboot.persistence.schema.Schema; -import com.codingapi.springboot.persistence.schema.executor.SchemaExecutor; -import com.codingapi.springboot.persistence.schema.factory.SchemaFactory; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; - -import java.util.List; - -@Slf4j -public class SchemaScanner implements ApplicationRunner { - - private final SchemaExecutor schemaExecutor; - - private final SchemaFactory schemaFactory; - - public SchemaScanner(SchemaExecutor schemaExecutor, SchemaFactory schemaFactory) { - this.schemaExecutor = schemaExecutor; - this.schemaFactory = schemaFactory; - } - - @Override - public void run(ApplicationArguments args) throws Exception { - List> domainClasses = DomainClassRegister.getInstance().getClasses(); - for (Class domainClass : domainClasses) { - Schema schema = schemaFactory.getSchema(domainClass); - SchemaContext.getInstance().register(schema); - schemaExecutor.create(schema); - } - } - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java deleted file mode 100644 index c93a6dc9..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/BuildSchema.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -import com.codingapi.springboot.persistence.property.SchemaProperty; - -public abstract class BuildSchema { - - public abstract String schema(); - - protected final SchemaProperty property; - - public BuildSchema(Schema schema) { - this.property = schema.getSchemaProperty(); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java deleted file mode 100644 index 3033e80b..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/DeleteSchema.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -import com.codingapi.springboot.persistence.property.SchemaProperty; - -public abstract class DeleteSchema { - - public abstract String schema(); - - protected final SchemaProperty property; - - public DeleteSchema(Schema schema) { - this.property = schema.getSchemaProperty(); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java deleted file mode 100644 index 192581a5..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SaveSchema.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -import com.codingapi.springboot.persistence.property.BeanProperty; -import com.codingapi.springboot.persistence.property.SchemaProperty; -import lombok.Getter; - -import java.util.ArrayList; -import java.util.List; - -@Getter -public abstract class SaveSchema { - - protected final SchemaProperty property; - - public SaveSchema(Schema schema) { - this.property = schema.getSchemaProperty(); - } - - public String schema() { - return schema(true); - } - - public abstract String schema(boolean hasId); - - - public Object[] getSaveValues(Object object, boolean hasId) { - List values = new ArrayList<>(); - for (BeanProperty beanProperty : property.getProperties(hasId)) { - values.add(beanProperty.get(object)); - } - return values.toArray(); - } - - public Object[] getSaveValues(Object object) { - return getSaveValues(object, true); - } -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java deleted file mode 100644 index 690c319b..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/Schema.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - - -import com.codingapi.springboot.persistence.property.SchemaProperty; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -@Getter -@Slf4j -public abstract class Schema { - - private final Class domainClass; - @Getter - private final SchemaProperty schemaProperty; - - public Schema(Class domainClass) { - log.info("Schema init:{}", domainClass); - this.domainClass = domainClass; - this.schemaProperty = new SchemaProperty(domainClass); - this.verify(); - } - - public void verify() { - if (!this.schemaProperty.hasIdProperty()) { - throw new RuntimeException("schema id property not found"); - } - } - - public abstract BuildSchema buildSchema(); - - public abstract SaveSchema saveSchema(); - - public abstract SearchSchema searchSchema(); - - public abstract DeleteSchema deleteSchema(); - - public abstract UpdateSchema updateSchema(); - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java deleted file mode 100644 index 590eca08..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/SearchSchema.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -import com.codingapi.springboot.persistence.property.SchemaProperty; -import lombok.Getter; - -@Getter -public abstract class SearchSchema { - - protected final SchemaProperty property; - - public SearchSchema(Schema schema) { - this.property = schema.getSchemaProperty(); - } - - public abstract String schema(); - - public Object getByIdValue(Object domain) { - return property.getIdBeanProperty().get(domain); - } - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java deleted file mode 100644 index fbd61152..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/UpdateSchema.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.codingapi.springboot.persistence.schema; - -import com.codingapi.springboot.persistence.property.BeanProperty; -import com.codingapi.springboot.persistence.property.SchemaProperty; - -public abstract class UpdateSchema { - - public abstract String schema(); - - protected final SchemaProperty property; - - public UpdateSchema(Schema schema) { - this.property = schema.getSchemaProperty(); - } - - public Object[] getUpdateValues(Object object) { - BeanProperty idBeanProperty = property.getIdBeanProperty(); - Object[] values = new Object[property.getProperties(true).size()]; - int i = 0; - for (BeanProperty beanProperty : property.getProperties(false)) { - values[i] = beanProperty.get(object); - i++; - } - values[i] = idBeanProperty.get(object); - return values; - } - - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java deleted file mode 100644 index 23a6e826..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/executor/SchemaExecutor.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.codingapi.springboot.persistence.schema.executor; - -import com.codingapi.springboot.persistence.schema.Schema; - -public interface SchemaExecutor { - - void create(Schema schema); - -} diff --git a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java b/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java deleted file mode 100644 index 768dd23b..00000000 --- a/springboot-starter-persistence/src/main/java/com/codingapi/springboot/persistence/schema/factory/SchemaFactory.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.codingapi.springboot.persistence.schema.factory; - -import com.codingapi.springboot.persistence.schema.Schema; - -public interface SchemaFactory { - - Schema getSchema(Class domainClass); -} diff --git a/springboot-starter-persistence/src/main/resources/META-INF/spring.factories b/springboot-starter-persistence/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 7f31636a..00000000 --- a/springboot-starter-persistence/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,3 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.codingapi.springboot.persistence.AutoConfiguration,\ -com.codingapi.springboot.persistence.jdbc.JdbcAutoConfiguration \ No newline at end of file diff --git a/springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index bd5ab7b5..00000000 --- a/springboot-starter-persistence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,2 +0,0 @@ -com.codingapi.springboot.persistence.AutoConfiguration -com.codingapi.springboot.persistence.jdbc.JdbcAutoConfiguration \ No newline at end of file diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java b/springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java deleted file mode 100644 index 339150f0..00000000 --- a/springboot-starter-persistence/src/test/java/com/example/demo/PersistenceApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.demo; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class PersistenceApplication { - - public static void main(String[] args) { - SpringApplication.run(PersistenceApplication.class, args); - } -} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java b/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java deleted file mode 100644 index f8ab3f23..00000000 --- a/springboot-starter-persistence/src/test/java/com/example/demo/domain/Demo.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.demo.domain; - -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; - -@Setter -@Getter -@ToString -public class Demo { - - private int id; - private String name; -} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java b/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java deleted file mode 100644 index cf1fcf16..00000000 --- a/springboot-starter-persistence/src/test/java/com/example/demo/register/DomainRegister.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.demo.register; - -import com.codingapi.springboot.persistence.register.DomainClassRegister; -import com.example.demo.domain.Demo; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Component; - -@Component -public class DomainRegister implements InitializingBean { - - @Override - public void afterPropertiesSet() throws Exception { - DomainClassRegister.getInstance().register(Demo.class); - } -} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java deleted file mode 100644 index 0051e7a3..00000000 --- a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepository.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.example.demo.repository; - -import com.codingapi.springboot.persistence.DomainPersistence; -import com.example.demo.domain.Demo; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Slf4j -@Repository -@AllArgsConstructor -public class DemoRepository { - - private final DomainPersistence domainPersistence; - - public void save(Demo demo) { - domainPersistence.save(demo); - } - - public Demo get(int id) { - return domainPersistence.get(Demo.class, id); - } - - public void delete(int id) { - domainPersistence.delete(Demo.class, id); - } - - public void update(Demo demo) { - domainPersistence.update(demo); - } - - public List findByName(String name) { - return domainPersistence.find(Demo.class, "select * from demo where name = ?", name); - } - -} diff --git a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java b/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java deleted file mode 100644 index abf45a74..00000000 --- a/springboot-starter-persistence/src/test/java/com/example/demo/repository/DemoRepositoryTests.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.example.demo.repository; - -import com.example.demo.domain.Demo; -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; - -import java.util.List; - -@Slf4j -@SpringBootTest -public class DemoRepositoryTests { - - - @Autowired - private DemoRepository demoRepository; - - @Test - void save1() { - Demo demo = new Demo(); - demo.setName("demo"); - demoRepository.save(demo); - System.out.println(demo.getId()); - } - - @Test - void save2() { - Demo demo = new Demo(); - demo.setName("demo"); - demo.setId(100); - demoRepository.save(demo); - System.out.println(demo.getId()); - } - - - @Test - void get() { - Demo demo = demoRepository.get(100); - log.info("demo: {}", demo); - } - - @Test - void delete() { - demoRepository.delete(100); - } - - - @Test - void update() { - Demo demo = new Demo(); - demo.setId(100); - demo.setName("123456"); - demoRepository.update(demo); - } - - @Test - void getByName() { - List list = demoRepository.findByName("demo"); - log.info("list: {}", list); - } -} diff --git a/springboot-starter-persistence/src/test/resources/application.properties b/springboot-starter-persistence/src/test/resources/application.properties deleted file mode 100644 index 9669e136..00000000 --- a/springboot-starter-persistence/src/test/resources/application.properties +++ /dev/null @@ -1,8 +0,0 @@ -spring.datasource.url=jdbc:mysql://localhost:3306/demo?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true -spring.datasource.username=root -spring.datasource.password=12345678 -spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver - -spring.datasource.hikari.maximum-pool-size=1 -spring.datasource.hikari.minimum-idle=1 -spring.datasource.hikari.connection-timeout=3000 diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 339a20ff..5f65ddbe 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -21,6 +21,11 @@ spring-data-commons + + jakarta.persistence + jakarta.persistence-api + + org.springframework spring-tx From b41b9fac1710c34438e11864334472bbbaf80465 Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 22:55:47 +0800 Subject: [PATCH 21/29] add todo --- TODO.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..70fd79a3 --- /dev/null +++ b/TODO.md @@ -0,0 +1,5 @@ +# 同步 + +* com.codingapi.springboot.framework.dto.request.IdRequest add +* com.codingapi.springboot.framework.dto.request.PageRequest#27 super(current, pageSize, sort); +* springboot-starter-data-fast update \ No newline at end of file From ae16a67d9bba4c8ea77cda8be1c4e0534312bcff Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Mon, 1 Jan 2024 23:48:37 +0800 Subject: [PATCH 22/29] add ScriptMethod --- .../springboot/fast/script/ScriptMapping.java | 7 +++---- .../fast/script/ScriptMappingRegister.java | 7 +++---- .../springboot/fast/script/ScriptMethod.java | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMethod.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java index bdcb54ca..3fc32f3b 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMapping.java @@ -6,7 +6,6 @@ import lombok.Getter; import lombok.Setter; import org.springframework.data.domain.Page; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.lang.reflect.Method; @@ -18,13 +17,13 @@ public class ScriptMapping { private String mapping; - private RequestMethod requestMethod; + private ScriptMethod scriptMethod; private String script; - public ScriptMapping(String mapping, RequestMethod requestMethod, String script) { + public ScriptMapping(String mapping, ScriptMethod scriptMethod, String script) { this.mapping = mapping; - this.requestMethod = requestMethod; + this.scriptMethod = scriptMethod; this.script = script; } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java index 668c31e5..a94e9134 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMappingRegister.java @@ -3,7 +3,6 @@ import com.codingapi.springboot.fast.mapping.MvcMappingRegister; import com.codingapi.springboot.framework.dto.response.Response; import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.RequestMethod; @AllArgsConstructor public class ScriptMappingRegister { @@ -16,7 +15,7 @@ public class ScriptMappingRegister { * @param scriptMapping dynamic mapping **/ public void addMapping(ScriptMapping scriptMapping) { - mappingRegister.addMapping(scriptMapping.getMapping(), scriptMapping.getRequestMethod(), + mappingRegister.addMapping(scriptMapping.getMapping(), scriptMapping.getScriptMethod().toRequestMethod(), scriptMapping, scriptMapping.getExecuteMethod()); } @@ -38,8 +37,8 @@ public Response test(ScriptMapping scriptMapping) { * @param url mapping url * @param requestMethod request method */ - public void removeMapping(String url, RequestMethod requestMethod){ - mappingRegister.removeMapping(url, requestMethod); + public void removeMapping(String url, ScriptMethod scriptMethod){ + mappingRegister.removeMapping(url, scriptMethod.toRequestMethod()); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMethod.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMethod.java new file mode 100644 index 00000000..8dfb44b6 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script/ScriptMethod.java @@ -0,0 +1,18 @@ +package com.codingapi.springboot.fast.script; + +import org.springframework.web.bind.annotation.RequestMethod; + +public enum ScriptMethod { + + GET, POST; + + + public RequestMethod toRequestMethod() { + if (this == GET) { + return RequestMethod.GET; + } else { + return RequestMethod.POST; + } + } + +} From 3237d88b84484b1438ffe00cf7651756606abcdf Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 08:58:00 +0800 Subject: [PATCH 23/29] add jackson-databind --- springboot-starter/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 5f65ddbe..190cb600 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -26,6 +26,11 @@ jakarta.persistence-api + + com.fasterxml.jackson.core + jackson-databind + + org.springframework spring-tx From 7058f8462d5c575f87056cb735d6322cdd43724c Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 09:09:16 +0800 Subject: [PATCH 24/29] add EnumSerializer --- TODO.md | 2 ++ .../codingapi/springboot/framework/em/IEnum.java | 6 ++++++ .../framework/serializable/EnumSerializer.java | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 springboot-starter/src/main/java/com/codingapi/springboot/framework/em/IEnum.java create mode 100644 springboot-starter/src/main/java/com/codingapi/springboot/framework/serializable/EnumSerializer.java diff --git a/TODO.md b/TODO.md index 70fd79a3..d5054898 100644 --- a/TODO.md +++ b/TODO.md @@ -2,4 +2,6 @@ * com.codingapi.springboot.framework.dto.request.IdRequest add * com.codingapi.springboot.framework.dto.request.PageRequest#27 super(current, pageSize, sort); +* com.codingapi.springboot.framework.em.IEnum add +* com.codingapi.springboot.framework.serializer.EnumSerializer add * springboot-starter-data-fast update \ No newline at end of file diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/em/IEnum.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/em/IEnum.java new file mode 100644 index 00000000..d24151b1 --- /dev/null +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/em/IEnum.java @@ -0,0 +1,6 @@ +package com.codingapi.springboot.framework.em; + +public interface IEnum { + + int getCode(); +} diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/serializable/EnumSerializer.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/serializable/EnumSerializer.java new file mode 100644 index 00000000..338dcf20 --- /dev/null +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/serializable/EnumSerializer.java @@ -0,0 +1,16 @@ +package com.codingapi.springboot.framework.serializable; + +import com.codingapi.springboot.framework.em.IEnum; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class EnumSerializer extends JsonSerializer { + + @Override + public void serialize(IEnum iEnum, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeNumber(iEnum.getCode()); + } +} From 5159af67761408ecb601442522e838c664310a6c Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 14:03:14 +0800 Subject: [PATCH 25/29] fix docs --- docs/wiki/home.md | 9 +- docs/wiki/springboot-starter-data-fast.md | 158 ++++++++++--------- docs/wiki/springboot-starter-id-generator.md | 34 ---- 3 files changed, 86 insertions(+), 115 deletions(-) delete mode 100644 docs/wiki/springboot-starter-id-generator.md diff --git a/docs/wiki/home.md b/docs/wiki/home.md index df4ad067..82c8ecea 100644 --- a/docs/wiki/home.md +++ b/docs/wiki/home.md @@ -18,12 +18,6 @@ maven install ${last.version} - - - com.codingapi.springboot - springboot-starter-id-generator - ${last.version} - @@ -35,7 +29,6 @@ maven install [springboot-starter](./springboot-starter) -[springboot-starter-security-jwt](./springboot-starter-security-jwt) -[springboot-starter-id-generator](./springboot-starter-id-generator) +[springboot-starter-security-jwt](./springboot-starter-security-jwt) [springboot-starter-data-fast](./springboot-starter-data-fast.md) \ No newline at end of file diff --git a/docs/wiki/springboot-starter-data-fast.md b/docs/wiki/springboot-starter-data-fast.md index cd631789..02a43ecd 100644 --- a/docs/wiki/springboot-starter-data-fast.md +++ b/docs/wiki/springboot-starter-data-fast.md @@ -2,53 +2,8 @@ springboot-starter-data-fast 基于JPA的快速API能力服务 -## FastController 快速API能力服务 -```java -package com.codingapi.springboot.example.query; - -import com.codingapi.springboot.example.infrastructure.jpa.entity.DemoEntity; -import com.codingapi.springboot.example.infrastructure.jpa.pojo.PageSearch; -import com.codingapi.springboot.fast.annotation.FastController; -import com.codingapi.springboot.fast.annotation.FastMapping; -import com.codingapi.springboot.framework.dto.response.MultiResponse; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.RequestMethod; - -@FastController -public interface FastDemoApi { - - - @PreAuthorize(value = "hasRole('ROLE_ADMIN')") - @FastMapping( - method = RequestMethod.GET, - mapping = "/api/demo/findByName1", - value = "select d from DemoEntity d where name = :name", - countQuery = "select count(d) from DemoEntity d where name = :name") - MultiResponse findByName1(PageSearch query); - - - - @PreAuthorize(value = "hasRole('ROLE_USER')") - @FastMapping( - method = RequestMethod.GET, - mapping = "/api/demo/findByName2", - value = "select d from DemoEntity d where name = :name", - countQuery = "select count(d) from DemoEntity d where name = :name") - MultiResponse findByName2(PageSearch query); - -} - -``` -@FastController 用于标记当前接口为Fast接口 -@FastMapping 用于标记当前接口的映射关系 -mapping为接口映射路径,method为接口请求方法 -value为查询语句,countQuery为查询总数语句,query为查询参数,支持分页查询,排序查询,查询参数等等 -MultiResponse为返回结果 -@PreAuthorize(value = "hasRole('ROLE_USER')") 用于标记当前接口的权限,如果不需要权限可以不用添加 - ## FastRepository 的使用教程 - 继承FastRepository接口,实现自定义的接口,即可使用FastRepository的能力 ```java @@ -189,41 +144,98 @@ public interface DemoRepository extends FastRepository { } ``` -## SortRepository的使用教程 -```java +## ScriptMapping 教程 -public interface DemoRepository extends FastRepository, SortRepository { +通过动态添加mvc mapping实现查询功能. -} ``` +ScriptMapping scriptMapping = new ScriptMapping({mapinggUrl}, {mapinggMethod}, {mappingGrovvry}); +scriptMappingRegister.addMapping(scriptMapping); -SortRepository的能力展示 +``` +mapinggUrl 是mvc接口的地址 +mapinggMethod 是mvc接口的请求方式 +mappingGrovvry 是执行的查询脚本 -```java +脚本实例代码: +* 动态分页查询 +``` +// 获取name的请求参数 +var name = $request.getParameter("name",""); +var pageNumber = $request.getParameter("pageNumber",0); +var pageSize = $request.getParameter("pageSize",10); +// 创建分页对象 +var pageRequest = $request.pageRequest(pageNumber,pageSize); +// 动态组织sql +var sql = "select * from api_mapping where 1 =1 "; +var countSql = "select count(1) from api_mapping where 1 =1 "; +// 动态组织参数 +var params = []; +if(!"".equals(name)){ + sql += " and name = ? "; + countSql += " and name = ? "; + params.push(name); +} +sql += " limit ?,?"; +// 添加分页参数 +params.add(pageRequest.getOffset()); +params.add(pageRequest.getPageSize()); +// 执行分页查询 +return $jdbc.queryForPage(sql,countSql,pageRequest,params.toArray()); +``` +* 动态条件查询 +``` +// 获取name的请求参数 +var name = $request.getParameter("name",""); +// 动态组织sql +String sql = "select * from api_mapping where 1=1 "; +// 动态组织参数 +var params = []; +if(!"".equals(name)){ + sql += " and name = ? "; + params.add(name); +} +// 执行查询 +return $jdbc.queryForList(sql,params.toArray()); +``` - @Test - @Transactional - void pageSort() { - demoRepository.deleteAll(); - Demo demo1 = new Demo(); - demo1.setName("123"); - demoRepository.save(demo1); - - Demo demo2 = new Demo(); - demo2.setName("456"); - demoRepository.save(demo2); - - List ids = Arrays.asList(demo1.getId(), demo2.getId()); - System.out.println(ids); - demoRepository.pageSort(PageRequest.of(1, 10), ids); - - Demo newDemo1 = demoRepository.getReferenceById(demo1.getId()); - Demo newDemo2 = demoRepository.getReferenceById(demo2.getId()); - - assertEquals(newDemo2.getSort(), 1); - assertEquals(newDemo1.getSort(), 0); - } +脚本语法介绍: +* $request +``` +// 获取参数name的值,如果参数不存在,则返回默认值 +var name = $request.getParameter("name",""); +// 获取分页对象 +var pageRequest = $request.pageRequest(0,10); +// 获取分页对象的页码 +var pageNumber = pageRequest.getPageNumber(); +// 获取分页对象的每页记录数 +var pageSize = pageRequest.getPageSize(); +// 获取分页对象的偏移量 +var offset = pageRequest.getOffset(); +``` +* $jdbc +``` +// 查询jdbcSQL $jdbc.queryForList({sql},{params}) + +// 查询无条件的数据 +var res = $jdbc.queryForList("select * from api_mapping"); +// 查询有条件的数据 +var res = $jdbc.queryForList("select * from api_mapping where name = ?",name); +// 查询多条件的数据 +var res = $jdbc.queryForList("select * from api_mapping where name = ? and url = ?",name,url); + +// 分页查询 $jdbc.queryForPage({sql},{countSql},{pageRequest},{params}) +var res = $jdbc.queryForPage("select * from api_mapping where name = ? and url = ?", +"select count(1) from api_mapping where name = ? and url = ?",pageRequest,params.toArray()); +``` +* $jpa +``` +// 查询jpa $jpa.listQuery({clazz},{sql},{params}) +// 查询无条件的数据 +var res = $jpa.listQuery(com.example.entity.NodeEntity.class,"from NodeEntity"); +// 查询有条件的数据 +var res = $jpa.listQuery(com.example.entity.NodeEntity.class,"from NodeEntity where name = ?",name); ``` \ No newline at end of file diff --git a/docs/wiki/springboot-starter-id-generator.md b/docs/wiki/springboot-starter-id-generator.md deleted file mode 100644 index 27bb96a9..00000000 --- a/docs/wiki/springboot-starter-id-generator.md +++ /dev/null @@ -1,34 +0,0 @@ -springboot-starter-id-generator - -一个单服务下的id自增构造器,为了解决id由数据库生成的问题,如果是分布式服务,可以使用snowflake算法生成id,如果是单服务,可以使用这个构造器生成id - -```java - -import com.codingapi.springboot.generator.IdGenerate; -import lombok.Getter; - -/** - * @author lorne - * @since 1.0.0 - */ -public class Demo implements IdGenerate { - - @Getter - private Integer id; - - @Getter - private String name; - - public Demo(String name) { - this.id = generateIntId(); - this.name = name; - } - -} - -``` - -只需要实现IdGenerate接口即可,然后调用generateIntId()方法即可生成id。 - -IdGenerate接口提供了两个方法,generateIntId()和generateLongId(),分别用于生成int类型和long类型的id。 -也可以使用generateStringId()方法生成String类型的id。 \ No newline at end of file From 167bd597f83a9ebacf06b78efe6a9546a7cf5a04 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 14:39:05 +0800 Subject: [PATCH 26/29] update 3.1.7 --- pom.xml | 4 ++-- springboot-starter-data-fast/pom.xml | 2 +- springboot-starter-security-jwt/pom.xml | 2 +- springboot-starter/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index b8ee7f1d..1cb279fb 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,13 @@ org.springframework.boot spring-boot-starter-parent - 3.1.5 + 3.1.7 com.codingapi.springboot springboot-parent - 3.1.7.dev + 3.1.7 https://github.com/codingapi/springboot-framewrok springboot-parent diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 6fe823d4..30f9f36e 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.1.7.dev + 3.1.7 4.0.0 diff --git a/springboot-starter-security-jwt/pom.xml b/springboot-starter-security-jwt/pom.xml index 0a512d60..e127223f 100644 --- a/springboot-starter-security-jwt/pom.xml +++ b/springboot-starter-security-jwt/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 3.1.7.dev + 3.1.7 springboot-starter-security-jwt diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 190cb600..58d6fe94 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -5,7 +5,7 @@ com.codingapi.springboot springboot-parent - 3.1.7.dev + 3.1.7 springboot-starter From a425ea9c2b0770f5f662bdc1d0c9ae8cd833f14d Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 14:45:57 +0800 Subject: [PATCH 27/29] update 3.1.7 --- README.md | 8 -------- TODO.md | 7 ------- 2 files changed, 15 deletions(-) delete mode 100644 TODO.md diff --git a/README.md b/README.md index 93c2750d..a1d30c5d 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ v.3.x 为springboot 3.x版本,使用jdk17版本 * springboot-starter | Springboot领域驱动框架 * springboot-starter-data-fast | 快速数据呈现框架 -* springboot-starter-id-generator | Id自增策略框架 * springboot-starter-security-jwt | security&jwt权限框架 ## SpringBoot DDD Architecture | SpringBoot DDD 框架图 @@ -42,13 +41,6 @@ v.3.x 为springboot 3.x版本,使用jdk17版本 ${last.version} - - - com.codingapi.springboot - springboot-starter-id-generator - ${last.version} - - com.codingapi.springboot diff --git a/TODO.md b/TODO.md deleted file mode 100644 index d5054898..00000000 --- a/TODO.md +++ /dev/null @@ -1,7 +0,0 @@ -# 同步 - -* com.codingapi.springboot.framework.dto.request.IdRequest add -* com.codingapi.springboot.framework.dto.request.PageRequest#27 super(current, pageSize, sort); -* com.codingapi.springboot.framework.em.IEnum add -* com.codingapi.springboot.framework.serializer.EnumSerializer add -* springboot-starter-data-fast update \ No newline at end of file From 39722d56392607cac4e8f8be851be49ad475b20e Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 21:58:57 +0800 Subject: [PATCH 28/29] add todo --- pom.xml | 6 +++--- springboot-starter/pom.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 1cb279fb..ccad90a5 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 1.11.0 0.10.2 0.9.16 - 1.70 + 1.77 1.2.0 2.2 4.0.15 @@ -77,8 +77,8 @@ org.bouncycastle - bcprov-jdk15on - ${bcprov-jdk15on.version} + bcprov-jdk18on + ${bcprov-jdk18on.version} diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 58d6fe94..3292aff0 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -48,7 +48,7 @@ org.bouncycastle - bcprov-jdk15on + bcprov-jdk18on From 10d6e580e21421696e485de2ce4b5871bc1ea6b8 Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Tue, 2 Jan 2024 22:22:19 +0800 Subject: [PATCH 29/29] add 3.1.8.dev --- pom.xml | 10 +++++++++- springboot-starter-data-fast/pom.xml | 2 +- springboot-starter-security-jwt/pom.xml | 2 +- springboot-starter/pom.xml | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index ccad90a5..4e6cd11e 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ com.codingapi.springboot springboot-parent - 3.1.7 + 3.1.8.dev https://github.com/codingapi/springboot-framewrok springboot-parent @@ -42,6 +42,7 @@ 1.2.0 2.2 4.0.15 + 2.2.224 @@ -75,6 +76,13 @@ + + com.h2database + h2 + ${h2.version} + + + org.bouncycastle bcprov-jdk18on diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 30f9f36e..86e74ee4 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.1.7 + 3.1.8.dev 4.0.0 diff --git a/springboot-starter-security-jwt/pom.xml b/springboot-starter-security-jwt/pom.xml index e127223f..3a5e63f7 100644 --- a/springboot-starter-security-jwt/pom.xml +++ b/springboot-starter-security-jwt/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 3.1.7 + 3.1.8.dev springboot-starter-security-jwt diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 3292aff0..485d634e 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -5,7 +5,7 @@ com.codingapi.springboot springboot-parent - 3.1.7 + 3.1.8.dev springboot-starter