diff --git a/README.md b/README.md index b4fc24d1..80fa7ae4 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ studentModel.findOrFail(8).bind("teachers").attach( 1, 2, 3 ); com.github.gaarason.database-all database-spring-boot-starter {latest-version} - + ``` diff --git a/database-api/src/main/java/gaarason/database/annotation/Column.java b/database-api/src/main/java/gaarason/database/annotation/Column.java index e26c5737..224ac665 100644 --- a/database-api/src/main/java/gaarason/database/annotation/Column.java +++ b/database-api/src/main/java/gaarason/database/annotation/Column.java @@ -49,7 +49,7 @@ boolean selectable() default true; /** - * 是否插入/更新/条件使用, 当对应策略值为DEFAULT时, 取用 + * 是否插入/更新/条件使用, 当对应策略值为DEFAULT(未配置)时, 取用本策略 */ Class strategy() default FieldStrategy.NotNull.class; diff --git a/database-query-mysql/pom.xml b/database-query-mysql/pom.xml index 8252ee3f..f79a7ecd 100644 --- a/database-query-mysql/pom.xml +++ b/database-query-mysql/pom.xml @@ -37,7 +37,7 @@ com.google.protobuf protobuf-java - 3.20.1 + 3.20.3 runtime diff --git a/database-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/database-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..8e800d3b --- /dev/null +++ b/database-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +gaarason.database.spring.boot.starter.configurations.GaarasonDatabaseAutoConfiguration \ No newline at end of file diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAnnotationTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAnnotationTests.java index 2bcf44b5..1ed0f7f1 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAnnotationTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAnnotationTests.java @@ -15,9 +15,6 @@ public class MysqlAnnotationTests extends AnnotationTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAsyncTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAsyncTests.java index 6770f384..17971af5 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAsyncTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlAsyncTests.java @@ -1,7 +1,6 @@ package gaarason.database.test; import gaarason.database.test.parent.AsyncTests; -import gaarason.database.test.parent.NullTests; import gaarason.database.test.utils.DatabaseTypeUtil; import lombok.extern.slf4j.Slf4j; import org.junit.BeforeClass; @@ -16,9 +15,6 @@ public class MysqlAsyncTests extends AsyncTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlCollectionTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlCollectionTests.java index 304273aa..49033d8e 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlCollectionTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlCollectionTests.java @@ -15,9 +15,6 @@ public class MysqlCollectionTests extends CollectionTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlIncrementTypeTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlIncrementTypeTests.java index 15497a53..1ec39aef 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlIncrementTypeTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlIncrementTypeTests.java @@ -18,10 +18,8 @@ public class MysqlIncrementTypeTests extends IncrementTypeTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } @Test diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlJsonTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlJsonTests.java index 0de1d458..291010be 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlJsonTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlJsonTests.java @@ -15,9 +15,6 @@ public class MysqlJsonTests extends JsonTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlLocalDateTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlLocalDateTests.java index 51958e71..cc71eab6 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlLocalDateTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlLocalDateTests.java @@ -15,9 +15,6 @@ public class MysqlLocalDateTests extends LocalDateTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlNullTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlNullTests.java index f8d76253..76b42ada 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlNullTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlNullTests.java @@ -15,9 +15,6 @@ public class MysqlNullTests extends NullTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlORMTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlORMTests.java index df9ac9d2..40ae001b 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlORMTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlORMTests.java @@ -15,9 +15,6 @@ public class MysqlORMTests extends ORMTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlQueryBuilderTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlQueryBuilderTests.java index 02d9d3fb..a0a0c163 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlQueryBuilderTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlQueryBuilderTests.java @@ -15,9 +15,6 @@ public class MysqlQueryBuilderTests extends QueryBuilderTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationMorphTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationMorphTests.java index 60b61457..38bb84a9 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationMorphTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationMorphTests.java @@ -15,9 +15,6 @@ public class MysqlRelationMorphTests extends RelationMorphTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationTests.java index f58d7c1d..44ad9cfa 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlRelationTests.java @@ -15,9 +15,6 @@ public class MysqlRelationTests extends RelationTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlScopeTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlScopeTests.java index 268a7c0b..e5f6bd44 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlScopeTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlScopeTests.java @@ -10,9 +10,6 @@ public class MysqlScopeTests extends ScopeTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlSerializableTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlSerializableTests.java index 47721ebe..c1d7f0d3 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlSerializableTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlSerializableTests.java @@ -15,9 +15,6 @@ public class MysqlSerializableTests extends SerializableTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlTransactionTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlTransactionTests.java index d4039ec1..3e7650ec 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlTransactionTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/MysqlTransactionTests.java @@ -15,9 +15,6 @@ public class MysqlTransactionTests extends TransactionTests { @BeforeClass public static void beforeClass() throws IOException { - DatabaseTypeUtil.setDatabaseTypeToMysql(); - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql.sql"; - initSql = readToString(sqlFilename); + initSql = DatabaseTypeUtil.setDatabaseTypeToMysql(); } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/models/normal/NullTestModel.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/models/normal/NullTestModel.java index 34b42b7b..97407442 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/models/normal/NullTestModel.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/models/normal/NullTestModel.java @@ -41,7 +41,9 @@ public static class Entity implements Serializable { @Column(name = "datetime_column", strategy = FieldStrategy.Always.class) private LocalDateTime datetimeColumn; - @Column(name = "timestamp_column", strategy = FieldStrategy.Always.class) + // 有部分版本的 mysql 不允许 时间字段为 null + // 所以就不用这个字段测试了 + @Column(name = "timestamp_column", strategy = FieldStrategy.NotNull.class) private Date timestampColumn; private boolean isDeleted; diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/NullTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/NullTests.java index 82f153e4..5d26323c 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/NullTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/NullTests.java @@ -51,7 +51,7 @@ public void test() { Assert.assertNull(entity.getDateColumn()); Assert.assertNull(entity.getTimeColumn()); Assert.assertNull(entity.getDatetimeColumn()); - Assert.assertNull(entity.getTimestampColumn()); +// Assert.assertNull(entity.getTimestampColumn()); NullTestModel.Entity forQuery = new NullTestModel.Entity(); forQuery.setId(id); diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/base/BaseTests.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/base/BaseTests.java index 95ebd4f3..195ba717 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/base/BaseTests.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/parent/base/BaseTests.java @@ -2,6 +2,7 @@ import gaarason.database.contract.connection.GaarasonDataSource; import gaarason.database.exception.SQLRuntimeException; +import gaarason.database.test.utils.DatabaseTypeUtil; import lombok.extern.slf4j.Slf4j; import org.junit.*; import org.junit.runners.MethodSorters; @@ -36,10 +37,12 @@ abstract public class BaseTests { Map tableSql = new HashMap<>(); for (TABLE table : TABLE.values()) { - String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( - "file:", "") + "../../src/test/java/gaarason/database/test/init/mysql-"+table.name()+".sql"; +// String sqlFilename = Thread.currentThread().getStackTrace()[1].getClass().getResource("/").toString().replace( + +// String sqlFilename = Thread.currentThread().getStackTrace()[1].getClassName().replace(".","/") + "/../../src/test/java/gaarason/database/test/init/mysql-"+table.name()+".sql"; try { - tableSql.put(table, readToString(sqlFilename).split(";\n")); + String sqlFilename = BaseTests.class.getClassLoader().getResource("sql/mysql-"+table.name()+".sql").getFile(); + tableSql.put(table, DatabaseTypeUtil.readToString(sqlFilename).split(";\n")); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/utils/DatabaseTypeUtil.java b/database-tests/database-core-test/src/test/java/gaarason/database/test/utils/DatabaseTypeUtil.java index 9184de09..f112ffae 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/utils/DatabaseTypeUtil.java +++ b/database-tests/database-core-test/src/test/java/gaarason/database/test/utils/DatabaseTypeUtil.java @@ -1,6 +1,11 @@ package gaarason.database.test.utils; import gaarason.database.DatabaseType; +import gaarason.database.test.MysqlAsyncTests; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; /** * 数据库类型 @@ -18,12 +23,27 @@ public static DatabaseType getDatabaseType() { return databaseType; } - public static void setDatabaseTypeToMysql() { + public static String setDatabaseTypeToMysql() throws IOException { databaseType = DatabaseType.MYSQL; + String sqlFilename = MysqlAsyncTests.class.getClassLoader().getResource("sql/mysql.sql").getFile(); + return readToString(sqlFilename); } - public static void setDatabaseTypeToMssql() { + public static String setDatabaseTypeToMssql() throws IOException { databaseType = DatabaseType.MSSQL; + String sqlFilename = MysqlAsyncTests.class.getClassLoader().getResource("sql/mssql.sql").getFile(); + return readToString(sqlFilename); } + public static String readToString(String fileName) throws IOException { + String encoding = "UTF-8"; + File file = new File(fileName); + file.setReadable(true); + Long fileLength = file.length(); + byte[] fileContent = new byte[fileLength.intValue()]; + FileInputStream in = new FileInputStream(file); + in.read(fileContent); + in.close(); + return new String(fileContent, encoding); + } } diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mssql.sql b/database-tests/database-core-test/src/test/resources/sql/mssql.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mssql.sql rename to database-tests/database-core-test/src/test/resources/sql/mssql.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-comment.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-comment.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-comment.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-comment.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-data_type.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-data_type.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-data_type.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-data_type.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-datetime_test.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-datetime_test.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-datetime_test.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-datetime_test.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-image.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-image.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-image.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-image.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-null_test.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-null_test.sql similarity index 91% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-null_test.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-null_test.sql index 5acf4259..0f085ddb 100644 --- a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-null_test.sql +++ b/database-tests/database-core-test/src/test/resources/sql/mysql-null_test.sql @@ -12,7 +12,7 @@ CREATE TABLE `null_test` `time_column` time DEFAULT NULL COMMENT 'time类型字段', `date_column` date DEFAULT NULL COMMENT 'date类型字段', `datetime_column` datetime DEFAULT NULL COMMENT 'datetime类型字段', - `timestamp_column` timestamp DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'timestamp类型字段', + `timestamp_column` timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT 'timestamp类型字段', PRIMARY KEY (`id`) ) ENGINE = InnoDB AUTO_INCREMENT = 1 diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-people.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-people.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-people.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-people.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-post.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-post.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-post.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-post.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-relationship_student_teacher.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-relationship_student_teacher.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-relationship_student_teacher.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-relationship_student_teacher.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-student.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-student.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-student.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-student.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-super_relation.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-super_relation.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-super_relation.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-super_relation.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-teacher.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-teacher.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-teacher.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-teacher.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-test.sql b/database-tests/database-core-test/src/test/resources/sql/mysql-test.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql-test.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql-test.sql diff --git a/database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql.sql b/database-tests/database-core-test/src/test/resources/sql/mysql.sql similarity index 100% rename from database-tests/database-core-test/src/test/java/gaarason/database/test/init/mysql.sql rename to database-tests/database-core-test/src/test/resources/sql/mysql.sql diff --git a/database-tests/database-spring-boot3-starter-test/pom.xml b/database-tests/database-spring-boot3-starter-test/pom.xml new file mode 100644 index 00000000..d47943dc --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.1.5 + + + + database-spring-boot3-starter-test + + + 17 + 17 + UTF-8 + + + + + com.github.gaarason + database-common-test + 0.0.1-SNAPSHOT + + + com.github.gaarason + database-spring-boot-starter + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-test + test + + + com.fasterxml.jackson.core + jackson-databind + + + org.springframework.boot + spring-boot-starter-test + + + + \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/TestApplication.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/TestApplication.java new file mode 100644 index 00000000..d15c0f3b --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/TestApplication.java @@ -0,0 +1,16 @@ +package gaarason.database.spring.boot.starter.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import java.util.concurrent.CountDownLatch; + +@SpringBootApplication +@EnableTransactionManagement +public class TestApplication { + public static void main(String[] args) throws InterruptedException { + SpringApplication.run(TestApplication.class, args); + new CountDownLatch(1).await(); + } +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/DataType.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/DataType.java new file mode 100644 index 00000000..4f20f0d2 --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/DataType.java @@ -0,0 +1,156 @@ +package gaarason.database.spring.boot.starter.test.data.entity; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import gaarason.database.annotation.Column; +import gaarason.database.annotation.Primary; +import gaarason.database.annotation.Table; +import gaarason.database.contract.support.FieldConversion; +import gaarason.database.contract.support.FieldStrategy; +import gaarason.database.lang.Nullable; +import gaarason.database.spring.boot.starter.test.data.model.base.BaseModel; +import lombok.Data; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Date; + +@Data +@Table(name = "data_type") +public class DataType implements Serializable { + + @Primary() + @Column(name = "id", unsigned = true) + private Long id; + + @Column(name = "name", length = 20, comment = "姓名") + private String name; + + @Column(name = "age", unsigned = true, comment = "年龄") + private Integer age; + + @Column(name = "sex", unsigned = true, comment = "性别1男2女") + private Integer sex; + + @Column(name = "subject", length = 20, comment = "科目") + private String subject; + + @Column(name = "created_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "新增时间") + private Date createdAt; + + @Column(name = "updated_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "更新时间") + private Date updatedAt; + + @Column(name = "created_time") + private Date createdTime; + + @Column(name = "updated_time") + private Date updatedTime; + + @Column(name = "is_deleted") + private Boolean isDeleted; + + @Column(name = "char_char") + private String charChar; + + @Column(name = "integer") + private Integer integer; + + @Column(name = "numeric") + private String numeric; + + @Column(name = "bigint") + private Long bigint; + + @Column(name = "binary", length = 0) + private String binary; + + @Column(name = "bit") + private Boolean bit; + + @Column(name = "blob", length = 65535) + private Byte[] blob; + + @Column(name = "date") + private Date date; + + @Column(name = "decimal") + private String decimal; + + @Column(name = "double_d") + private String doubleD; + + @Column(name = "point") + private String point; + + @Column(name = "linestring") + private String linestring; + + @Column(name = "geometry") + private String geometry; + + @Column(name = "text", length = 65535, conversion = JsonFieldConversion.class) + private Info text; + + /** auto generator end **/ + + @Data + public static class Info { + private String school; + private String country; + } + + + public static class JsonFieldConversion implements FieldConversion { + + public final static ObjectMapper MAPPER = new ObjectMapper(); + + @Nullable + @Override + public Object serialize(Field field, @Nullable Object fieldValue) { + if (fieldValue == null) { + return null; + } + try { + return MAPPER.writeValueAsString(fieldValue); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @Nullable + @Override + public Object acquisition(Field field, ResultSet resultSet, String columnName) throws SQLException { + String valueOfDB = resultSet.getString(columnName); + if (valueOfDB == null || valueOfDB.equals("")) { + return valueOfDB; + } + try { + return MAPPER.readValue(valueOfDB, field.getType()); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @Nullable + @Override + public Object deserialize(Field field, @Nullable Object originalValue) { + if (originalValue == null || "".equals(originalValue)) { + return null; + } + try { + return MAPPER.readValue(MAPPER.writeValueAsString(originalValue), field.getType()); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + } + + @Repository + public static class Model extends BaseModel { + + } +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/RelationshipStudentTeacher.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/RelationshipStudentTeacher.java new file mode 100644 index 00000000..69ae8ae4 --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/RelationshipStudentTeacher.java @@ -0,0 +1,56 @@ +package gaarason.database.spring.boot.starter.test.data.entity; + +import gaarason.database.annotation.BelongsTo; +import gaarason.database.annotation.Column; +import gaarason.database.annotation.Primary; +import gaarason.database.annotation.Table; +import gaarason.database.contract.support.FieldStrategy; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@Table(name = "relationship_student_teacher") +public class RelationshipStudentTeacher implements Serializable { + + /** + * auto generator start + **/ + + final public static String ID = "id"; + + final public static String STUDENT_ID = "student_id"; + + final public static String TEACHER_ID = "teacher_id"; + + final public static String CREATED_AT = "created_at"; + + final public static String UPDATED_AT = "updated_at"; + + @Primary() + @Column(name = "id", unsigned = true) + private Long id; + + @Column(name = "student_id", unsigned = true, comment = "学生id") + private Long studentId; + + @Column(name = "teacher_id", unsigned = true, comment = "教师id") + private Long teacherId; + + @Column(name = "created_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "新增时间") + private Date createdAt; + + private String note; + + @Column(name = "updated_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "更新时间") + private Date updatedAt; + + /** auto generator end **/ + + @BelongsTo(localModelForeignKey = "student_id") + private Student student; + + @BelongsTo(localModelForeignKey = "teacher_id") + private Teacher teacher; +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/Student.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/Student.java new file mode 100644 index 00000000..d4da4c0b --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/Student.java @@ -0,0 +1,69 @@ +package gaarason.database.spring.boot.starter.test.data.entity; + +import gaarason.database.annotation.*; +import gaarason.database.contract.support.FieldStrategy; +import gaarason.database.spring.boot.starter.test.data.model.RelationshipStudentTeacherModel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +@Table(name = "student") +public class Student implements Serializable { + + /** + * auto generator start + **/ + + final public static String ID = "id"; + + final public static String NAME = "name"; + + final public static String AGE = "age"; + + final public static String SEX = "sex"; + + final public static String TEACHER_ID = "teacher_id"; + + final public static String IS_DELETED = "is_deleted"; + + final public static String CREATED_AT = "created_at"; + + final public static String UPDATED_AT = "updated_at"; + + @Primary() + @Column(name = "id", unsigned = true) + private Long id; + + @Column(name = "name", length = 20, comment = "姓名") + private String name; + + @Column(name = "age", unsigned = true, comment = "年龄") + private Integer age; + + @Column(name = "sex", unsigned = true, comment = "性别1男2女") + private Integer sex; + + @Column(name = "teacher_id", unsigned = true, comment = "教师id") + private Long teacherId; + + @Column(name = "is_deleted") + private Boolean isDeleted; + + @Column(name = "created_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "新增时间") + private Date createdAt; + + @Column(name = "updated_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "更新时间") + private Date updatedAt; + + /** auto generator end **/ + + @HasOneOrMany(sonModelForeignKey = "student_id") + private List relationshipStudentTeachers; + + @BelongsToMany(relationModel = RelationshipStudentTeacherModel.class, foreignKeyForLocalModel = "student_id", + foreignKeyForTargetModel = "teacher_id", localModelLocalKey = "id", targetModelLocalKey = "id") + private List teachersBelongsToMany; +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/Teacher.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/Teacher.java new file mode 100644 index 00000000..2a20ae0a --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/Teacher.java @@ -0,0 +1,73 @@ +package gaarason.database.spring.boot.starter.test.data.entity; + +import gaarason.database.annotation.*; +import gaarason.database.contract.support.FieldStrategy; +import gaarason.database.spring.boot.starter.test.data.model.RelationshipStudentTeacherModel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +@Table(name = "teacher") +public class Teacher implements Serializable { + + /** + * auto generator start + **/ + + final public static String ID = "id"; + + final public static String NAME = "name"; + + final public static String AGE = "age"; + + final public static String SEX = "sex"; + + final public static String SUBJECT = "subject"; + + final public static String CREATED_AT = "created_at"; + + final public static String UPDATED_AT = "updated_at"; + + @Primary() + @Column(name = "id") + private Integer id; + + @Column(name = "name", length = 20, comment = "姓名") + private String name; + + @Column(name = "age", unsigned = true, comment = "年龄") + private Integer age; + + @Column(name = "sex", unsigned = true, comment = "性别1男2女") + private Integer sex; + + @Column(name = "subject", length = 20, comment = "科目") + private String subject; + + @Column(name = "created_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "新增时间") + private Date createdAt; + + @Column(name = "updated_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "更新时间") + private Date updatedAt; + + /** + * auto generator end + **/ + + @HasOneOrMany(sonModelForeignKey = "teacher_id") + private List students; + + @HasOneOrMany(sonModelForeignKey = "teacher_id", localModelLocalKey = "id") + private Student student; + + @HasOneOrMany(sonModelForeignKey = "teacher_id") + private List relationshipStudentTeachers; + + @BelongsToMany(relationModel = RelationshipStudentTeacherModel.class, + foreignKeyForLocalModel = "teacher_id", foreignKeyForTargetModel = "student_id", localModelLocalKey = "id", + targetModelLocalKey = "id") + private List studentsBelongsToMany; +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/TestEntity.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/TestEntity.java new file mode 100644 index 00000000..97dc6e2c --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/entity/TestEntity.java @@ -0,0 +1,107 @@ +package gaarason.database.spring.boot.starter.test.data.entity; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import gaarason.database.annotation.Column; +import gaarason.database.annotation.Table; +import gaarason.database.contract.support.FieldConversion; +import gaarason.database.contract.support.FieldStrategy; +import gaarason.database.lang.Nullable; +import gaarason.database.spring.boot.starter.test.data.model.base.BaseModel; +import lombok.Data; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Date; + +@Data +@Table(name = "test") +public class TestEntity implements Serializable { + + /** + * auto generator start + **/ + + @Column(name = "id", length = 12) + private String id; + + @Column(name = "name", length = 20, comment = "姓名") + private String name; + + @Column(name = "age", unsigned = true, comment = "年龄") + private Integer age; + + @Column(name = "sex", unsigned = true, comment = "性别1男2女") + private Integer sex; + + @Column(name = "subject", length = 20, comment = "科目", conversion = JsonFieldConversion.class) + private Info subject; + + @Column(name = "created_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "新增时间") + private Date createdAt; + + @Column(name = "updated_at", insertStrategy = FieldStrategy.Never.class, updateStrategy = FieldStrategy.Never.class, comment = "更新时间") + private Date updatedAt; + + /** auto generator end **/ + + @Data + public static class Info { + private String school; + private String country; + } + + + public static class JsonFieldConversion implements FieldConversion { + + public final static ObjectMapper MAPPER = new ObjectMapper(); + + @Nullable + @Override + public Object serialize(Field field, @Nullable Object fieldValue) { + if (fieldValue == null) { + return null; + } + try { + return MAPPER.writeValueAsString(fieldValue); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @Nullable + @Override + public Object acquisition(Field field, ResultSet resultSet, String columnName) throws SQLException { + String valueOfDB = resultSet.getString(columnName); + if (valueOfDB == null || valueOfDB.equals("")) { + return valueOfDB; + } + try { + return MAPPER.readValue(valueOfDB, field.getType()); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @Nullable + @Override + public Object deserialize(Field field, @Nullable Object originalValue) { + if (originalValue == null || "".equals(originalValue)) { + return null; + } + try { + return MAPPER.readValue(MAPPER.writeValueAsString(originalValue), field.getType()); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + } + + @Repository + public static class Model extends BaseModel { + + } +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/RelationshipStudentTeacherModel.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/RelationshipStudentTeacherModel.java new file mode 100644 index 00000000..ce0cfd16 --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/RelationshipStudentTeacherModel.java @@ -0,0 +1,13 @@ +package gaarason.database.spring.boot.starter.test.data.model; + +import gaarason.database.spring.boot.starter.test.data.entity.RelationshipStudentTeacher; +import gaarason.database.spring.boot.starter.test.data.model.base.BaseModel; +import org.springframework.stereotype.Repository; + +/** + * @author xt + */ +@Repository +public class RelationshipStudentTeacherModel extends BaseModel { + +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/StudentModel.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/StudentModel.java new file mode 100644 index 00000000..58c62946 --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/StudentModel.java @@ -0,0 +1,34 @@ +package gaarason.database.spring.boot.starter.test.data.model; + +import gaarason.database.exception.base.BaseException; +import gaarason.database.spring.boot.starter.test.data.entity.Student; +import gaarason.database.spring.boot.starter.test.data.model.base.BaseModel; +import gaarason.database.spring.boot.starter.test.data.repository.StudentQuery; +import org.springframework.stereotype.Repository; + +@Repository +public class StudentModel extends BaseModel implements StudentQuery { + + @Override + public Student updateName() { + newQuery().where("id", "1").data("name", "bgfd").update(); + + if (true) { + throw new BaseException("更新操作执行完, 抛出异常"); + } + + return findOrFail(1L).toObject(); + } + + @Override + public Student getInfoFromDB() { + Student student = findOrFail(1L).toObject(); + System.out.println("StudentModel : getInfoFromDB :" + student); + return student; + } + + @Override + public Student father() { + return null; + } +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/TeacherModel.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/TeacherModel.java new file mode 100644 index 00000000..31a87353 --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/TeacherModel.java @@ -0,0 +1,42 @@ +package gaarason.database.spring.boot.starter.test.data.model; + +import gaarason.database.spring.boot.starter.test.data.entity.Student; +import gaarason.database.spring.boot.starter.test.data.entity.Teacher; +import gaarason.database.spring.boot.starter.test.data.model.base.BaseModel; +import gaarason.database.spring.boot.starter.test.data.repository.StudentQuery; +import gaarason.database.spring.boot.starter.test.data.repository.TeacherQuery; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; + +@Repository +public class TeacherModel extends BaseModel implements TeacherQuery { + + + @Resource + StudentQuery studentModel; + + @Override + public Student updateName() { + + studentModel.getInfoFromDB(); + try { + + studentModel.updateName(); + } catch (Exception ignore) { + + } + + + return studentModel.getInfoFromDB(); + } + + @Override + public Student getInfoFromDB() { + return null; + } + + @Override + public Student father() { + return null; + } +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/base/BaseModel.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/base/BaseModel.java new file mode 100644 index 00000000..dfe78c7a --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/model/base/BaseModel.java @@ -0,0 +1,40 @@ +package gaarason.database.spring.boot.starter.test.data.model.base; + +import gaarason.database.contract.connection.GaarasonDataSource; +import gaarason.database.eloquent.Model; +import gaarason.database.util.StringUtils; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serializable; +import java.util.Collection; + +/** + * 数据模型 + * @param + * @param + * @author xt + */ +@Slf4j +public abstract class BaseModel extends Model { + + @Resource + protected GaarasonDataSource gaarasonDataSource; + + @Override + public GaarasonDataSource getGaarasonDataSource() { + return gaarasonDataSource; + } + + /** + * sql日志记录 + * @param sql 带占位符的sql + * @param parameterList 参数 + */ + @Override + public void log(String sql, Collection parameterList) { + String format = String.format(StringUtils.replace(sql, " ? ", "\"%s\""), parameterList.toArray()); + log.info("SQL complete : {}", format); + } + +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/repository/StudentQuery.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/repository/StudentQuery.java new file mode 100644 index 00000000..4033cebe --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/repository/StudentQuery.java @@ -0,0 +1,21 @@ +package gaarason.database.spring.boot.starter.test.data.repository; + +import gaarason.database.spring.boot.starter.test.data.entity.Student; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +public interface StudentQuery { + + +// @Transactional(rollbackFor = Throwable.class) + + @Transactional(propagation = Propagation.NESTED, rollbackFor = Throwable.class) + Student updateName(); + + @Transactional(propagation = Propagation.NESTED, rollbackFor = Throwable.class) + Student getInfoFromDB(); + + @Transactional(propagation = Propagation.NESTED, rollbackFor = Throwable.class) + Student father(); + +} diff --git a/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/repository/TeacherQuery.java b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/repository/TeacherQuery.java new file mode 100644 index 00000000..06a493fa --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/main/java/gaarason/database/spring/boot/starter/test/data/repository/TeacherQuery.java @@ -0,0 +1,21 @@ +package gaarason.database.spring.boot.starter.test.data.repository; + +import gaarason.database.spring.boot.starter.test.data.entity.Student; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +public interface TeacherQuery { + + +// @Transactional(rollbackFor = Throwable.class) + + @Transactional(propagation = Propagation.NESTED) + Student updateName(); + + @Transactional(propagation = Propagation.NESTED) + Student getInfoFromDB(); + + @Transactional(propagation = Propagation.NESTED) + Student father(); + +} diff --git a/database-tests/database-spring-boot3-starter-test/src/test/java/gaarason/database/spring/boot/starter/test/DruidApplicationTests.java b/database-tests/database-spring-boot3-starter-test/src/test/java/gaarason/database/spring/boot/starter/test/DruidApplicationTests.java new file mode 100644 index 00000000..997c6a4b --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/test/java/gaarason/database/spring/boot/starter/test/DruidApplicationTests.java @@ -0,0 +1,142 @@ +package gaarason.database.spring.boot.starter.test; + +import gaarason.database.contract.eloquent.Model; +import gaarason.database.contract.eloquent.Record; +import gaarason.database.eloquent.GeneralModel; +import gaarason.database.generator.GeneralGenerator; +import gaarason.database.generator.Generator; +import gaarason.database.spring.boot.starter.test.data.entity.Student; +import gaarason.database.spring.boot.starter.test.data.entity.Teacher; +import gaarason.database.spring.boot.starter.test.data.entity.TestEntity; +import gaarason.database.spring.boot.starter.test.data.repository.StudentQuery; +import gaarason.database.spring.boot.starter.test.data.repository.TeacherQuery; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@SpringBootTest +@Slf4j +public class DruidApplicationTests { + + @Resource + GeneralGenerator generator; + + @Resource + GeneralModel generalModel; + + @Resource + TestEntity.Model testEntityModel; + + @Resource + StudentQuery studentQuery; + + @Resource + TeacherQuery teacherQuery; + + @Resource + Model studentModel; + + @Test + public void 生成代码() { + // set + generator.setOutputDir("./src/test/java/"); // 所有生成文件的路径 +// generator.setOutputDir("./src/test/java1/"); // 所有生成文件的路径 + generator.setNamespace("data"); // 所有生成文件的所属命名空间 + generator.setCorePoolSize(20); // 所用的线程数 + generator.setSpringBoot(true); // 是否生成spring boot相关注解 + generator.setSwagger(true); // 是否生成swagger相关注解 + generator.setValidator(true); // 是否生成validator相关注解 + + generator.setEntityStaticField(true); // 是否在实体中生成静态字段 + generator.setBaseEntityDir("base"); // 实体父类的相对路径 + generator.setBaseEntityFields("id"); // 实体父类存在的字段 + generator.setBaseEntityName("BaseEntity"); // 实体父类的类名 + generator.setEntityDir("entity"); // 实体的相对路径 + generator.setEntityPrefix(""); // 实体的类名前缀 + generator.setEntitySuffix(""); // 实体的类名后缀 + + + generator.setBaseModelDir("base"); // 模型父类的相对路径 + generator.setBaseModelName("BaseModel"); // 模型父类的类名 + generator.setModelDir("model"); // 模型的相对路径 + generator.setModelPrefix(""); // 模型的类名前缀 + generator.setModelSuffix("Model"); // 模型的类名后缀 + + // 执行 + generator.run(); + } + + @Test + public void run有参构造() { + String jdbcUrl = "jdbc:mysql://mysql.local/test_master_0?useUnicode=true&characterEncoding=utf-8" + + "&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai"; + String username = "root"; + String password = "root"; + Generator generator = new Generator(jdbcUrl, username, password); + + // set + generator.setEntityStaticField(true); + generator.setSpringBoot(true); // 是否生成spring boot相关注解 + generator.setSwagger(true); // 是否生成swagger相关注解 + generator.setValidator(true); // 是否生成validator相关注解 + generator.setCorePoolSize(20); +// generator.setOutputDir("./src/test/java/"); + generator.setOutputDir("./src/test/java1/"); + generator.setNamespace("test.data"); + + generator.run(); + } + + @Test + public void 简单查询_通用_generalModel() { + Record first = generalModel.newQuery() + .from("student") + .where("id", "3") + .firstOrFail(); + Assertions.assertNotNull(first); + Map stringObjectMap = first.toMap(); + Assertions.assertEquals(stringObjectMap.get("id").toString(), "3"); + System.out.println(stringObjectMap); + } + + @Test + public void 简单插入_返回自增id() { + List vList = new ArrayList<>(); + vList.add("aaaccc"); + Object id = generalModel.newQuery().from("student").column("name").value(vList).insertGetId(); + Assertions.assertNotNull(id); + + Object studentId = generalModel.newQuery().from("student").insertGetId(); + Assertions.assertNotNull(studentId); + + Assertions.assertEquals(Integer.parseInt(studentId.toString()) - 1, Integer.parseInt(id.toString())); + } + + @Test + public void 使用接口调用() { + try { + Student student = studentQuery.updateName(); + System.out.println(student); + + } catch (Throwable e) { + e.printStackTrace(); + } + + Student student = studentQuery.getInfoFromDB(); + System.out.println(student); + } + + @Test + public void sss() { + Student student = teacherQuery.updateName(); + System.out.println("end : " + student); + } + +} \ No newline at end of file diff --git a/database-tests/database-spring-boot3-starter-test/src/test/resources/application.properties b/database-tests/database-spring-boot3-starter-test/src/test/resources/application.properties new file mode 100644 index 00000000..0da77a5b --- /dev/null +++ b/database-tests/database-spring-boot3-starter-test/src/test/resources/application.properties @@ -0,0 +1,17 @@ +#spring.datasource.druid.url=jdbc:mysql://mysql.local/test_master_0?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai +#spring.datasource.druid.username=root +#spring.datasource.druid.password=root +#spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://mysql.local/test_master_0?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.type=com.alibaba.druid.pool.DruidDataSource +#spring.datasource.druid.db-type=com.alibaba.druid.pool.DruidDataSource +gaarason.database.snow-flake.worker-id=4 +gaarason.database.scan.packages=test.gpacc,asdsda,qweqwe.qeqwew +gaarason.database.scan.filter-exclude-packages= + + + + diff --git a/database-tests/pom.xml b/database-tests/pom.xml index e40660d2..38b4ccf8 100644 --- a/database-tests/pom.xml +++ b/database-tests/pom.xml @@ -17,6 +17,7 @@ database-spring-boot-starter-hikari-test database-common-test database-spring-boot-starter-mybatis-test + database-spring-boot3-starter-test diff --git a/document/version.md b/document/version.md index 99307a88..6d8c1418 100644 --- a/document/version.md +++ b/document/version.md @@ -25,6 +25,10 @@ Eloquent ORM for Java ## 版本升级指引 +### 5.0.0 + +- 支持 SpringBoot3 以及 java17 + ### 4.9.1 - 优化