diff --git a/pom.xml b/pom.xml index e4b469e086..de7862be5a 100644 --- a/pom.xml +++ b/pom.xml @@ -88,13 +88,19 @@ org.postgresql postgresql - 9.4-1206-jdbc41 + 42.7.4 test - mysql - mysql-connector-java - 8.0.21 + com.mysql + mysql-connector-j + 8.2.0 + test + + + org.mariadb.jdbc + mariadb-java-client + 3.4.1 test diff --git a/test/org/nutz/dao/test/normal/mysql/AllMysqlTest.java b/test/org/nutz/dao/test/normal/mysql/AllMysqlTest.java index 19a5d6280f..c7e86f262e 100644 --- a/test/org/nutz/dao/test/normal/mysql/AllMysqlTest.java +++ b/test/org/nutz/dao/test/normal/mysql/AllMysqlTest.java @@ -4,5 +4,5 @@ import org.junit.runners.Suite; @RunWith(Suite.class) -@Suite.SuiteClasses({MysqlJsonTest.class}) +@Suite.SuiteClasses({MysqlJsonTest.class, MysqlJsonAdaptorTest.class}) public class AllMysqlTest {} diff --git a/test/org/nutz/dao/test/normal/mysql/MysqlJsonAdaptorTest.java b/test/org/nutz/dao/test/normal/mysql/MysqlJsonAdaptorTest.java new file mode 100644 index 0000000000..81bb845470 --- /dev/null +++ b/test/org/nutz/dao/test/normal/mysql/MysqlJsonAdaptorTest.java @@ -0,0 +1,48 @@ +package org.nutz.dao.test.normal.mysql; + +import static org.junit.Assert.assertEquals; + +import java.math.BigDecimal; + +import org.junit.Test; +import org.nutz.dao.Cnd; +import org.nutz.dao.test.DaoCase; +import org.nutz.json.Json; +import org.nutz.json.JsonFormat; + +public class MysqlJsonAdaptorTest extends DaoCase { + + @Override + protected void before() { + if (!dao.meta().isMySql()) { + return; + } + dao.create(MysqlJsonAdaptorTestBean.class, true); + } + + @Test + public void adapotor() { + if (!dao.meta().isMySql()) { + return; + } + + MysqlJsonAdaptorTestBean testBean = new MysqlJsonAdaptorTestBean(); + StudentResult result = new StudentResult(); + result.setPhysics(new BigDecimal("100")); + testBean.setNoneAdaptor(result); + testBean.setJsonAdaptor(result); + testBean.setJsonCompactAdaptor(result); + testBean.setJsonTidyAdaptor(result); + + int insertId = dao.insert(testBean).getId(); + + org.nutz.dao.entity.Record record = dao.fetch("t_mysql_json_adaptor_test_bean", Cnd.where("id","=",insertId)); + // mysql 在保存 json 格式字段的时候会自动格式化该字段的值 + // mariadb 的话就没问题 + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("noneAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("noneAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("jsonAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.compact()), record.getString("jsonCompactAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("jsonTidyAdaptor")); + } +} diff --git a/test/org/nutz/dao/test/normal/mysql/MysqlJsonAdaptorTestBean.java b/test/org/nutz/dao/test/normal/mysql/MysqlJsonAdaptorTestBean.java new file mode 100644 index 0000000000..da850ceaed --- /dev/null +++ b/test/org/nutz/dao/test/normal/mysql/MysqlJsonAdaptorTestBean.java @@ -0,0 +1,68 @@ +package org.nutz.dao.test.normal.mysql; + +import org.nutz.dao.entity.annotation.ColDefine; +import org.nutz.dao.entity.annotation.ColType; +import org.nutz.dao.entity.annotation.Id; +import org.nutz.dao.entity.annotation.Table; +import org.nutz.dao.impl.jdbc.mysql.MysqlJsonAdaptor; +import org.nutz.dao.impl.jdbc.mysql.MysqlJsonCompactAdaptor; +import org.nutz.dao.impl.jdbc.mysql.MysqlJsonTidyAdaptor; + +@Table("t_mysql_json_adaptor_test_bean") +public class MysqlJsonAdaptorTestBean { + + @Id + private int id; + + @ColDefine(customType = "json", type = ColType.MYSQL_JSON) + private StudentResult noneAdaptor; + + @ColDefine(customType = "json", type = ColType.MYSQL_JSON, adaptor = MysqlJsonAdaptor.class) + private StudentResult jsonAdaptor; + + @ColDefine(customType = "json", type = ColType.MYSQL_JSON, adaptor = MysqlJsonCompactAdaptor.class) + private StudentResult jsonCompactAdaptor; + + @ColDefine(customType = "json", type = ColType.MYSQL_JSON, adaptor = MysqlJsonTidyAdaptor.class) + private StudentResult jsonTidyAdaptor; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public StudentResult getNoneAdaptor() { + return noneAdaptor; + } + + public void setNoneAdaptor(StudentResult noneAdaptor) { + this.noneAdaptor = noneAdaptor; + } + + public StudentResult getJsonAdaptor() { + return jsonAdaptor; + } + + public void setJsonAdaptor(StudentResult jsonAdaptor) { + this.jsonAdaptor = jsonAdaptor; + } + + public StudentResult getJsonCompactAdaptor() { + return jsonCompactAdaptor; + } + + public void setJsonCompactAdaptor(StudentResult jsonCompactAdaptor) { + this.jsonCompactAdaptor = jsonCompactAdaptor; + } + + public StudentResult getJsonTidyAdaptor() { + return jsonTidyAdaptor; + } + + public void setJsonTidyAdaptor(StudentResult jsonTidyAdaptor) { + this.jsonTidyAdaptor = jsonTidyAdaptor; + } +} diff --git a/test/org/nutz/dao/test/normal/psql/AllPsqlTest.java b/test/org/nutz/dao/test/normal/psql/AllPsqlTest.java index cf5abf799b..6ade2115f7 100644 --- a/test/org/nutz/dao/test/normal/psql/AllPsqlTest.java +++ b/test/org/nutz/dao/test/normal/psql/AllPsqlTest.java @@ -4,5 +4,5 @@ import org.junit.runners.Suite; @RunWith(Suite.class) -@Suite.SuiteClasses({PsqlJsonTest.class, PsqlArrayTest.class}) +@Suite.SuiteClasses({PsqlJsonTest.class, PsqlArrayTest.class, PsqlJsonAdaptorTest.class}) public class AllPsqlTest {} diff --git a/test/org/nutz/dao/test/normal/psql/PsqlJsonAdaptorTest.java b/test/org/nutz/dao/test/normal/psql/PsqlJsonAdaptorTest.java new file mode 100644 index 0000000000..c3bc77afa0 --- /dev/null +++ b/test/org/nutz/dao/test/normal/psql/PsqlJsonAdaptorTest.java @@ -0,0 +1,47 @@ +package org.nutz.dao.test.normal.psql; + +import static org.junit.Assert.assertEquals; + +import java.math.BigDecimal; + +import org.junit.Test; +import org.nutz.dao.Cnd; +import org.nutz.dao.test.DaoCase; +import org.nutz.json.Json; +import org.nutz.json.JsonFormat; + +public class PsqlJsonAdaptorTest extends DaoCase { + + @Override + protected void before() { + if (!dao.meta().isPostgresql()) { + return; + } + dao.create(PsqlJsonAdaptorTestBean.class, true); + } + + @Test + public void adapotor() { + if (!dao.meta().isPostgresql()) { + return; + } + + PsqlJsonAdaptorTestBean testBean = new PsqlJsonAdaptorTestBean(); + org.nutz.dao.test.normal.psql.StudentResult result = new StudentResult(); + result.setPhysics(new BigDecimal("100")); + testBean.setNoneAdaptor(result); + testBean.setJsonAdaptor(result); + testBean.setJsonCompactAdaptor(result); + testBean.setJsonTidyAdaptor(result); + + int insertId = dao.insert(testBean).getId(); + + org.nutz.dao.entity.Record record = dao.fetch("t_psql_json_adaptor_test_bean", Cnd.where("id","=",insertId)); + // 设置成 jsonb 格式的时候会自动格式化该字段的值 + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("noneAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("noneAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("jsonAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.compact()), record.getString("jsonCompactAdaptor")); + assertEquals(Json.toJson(result, JsonFormat.tidy()), record.getString("jsonTidyAdaptor")); + } +} diff --git a/test/org/nutz/dao/test/normal/psql/PsqlJsonAdaptorTestBean.java b/test/org/nutz/dao/test/normal/psql/PsqlJsonAdaptorTestBean.java new file mode 100644 index 0000000000..952dbbc4e5 --- /dev/null +++ b/test/org/nutz/dao/test/normal/psql/PsqlJsonAdaptorTestBean.java @@ -0,0 +1,68 @@ +package org.nutz.dao.test.normal.psql; + +import org.nutz.dao.entity.annotation.ColDefine; +import org.nutz.dao.entity.annotation.ColType; +import org.nutz.dao.entity.annotation.Id; +import org.nutz.dao.entity.annotation.Table; +import org.nutz.dao.impl.jdbc.psql.PsqlJsonAdaptor; +import org.nutz.dao.impl.jdbc.psql.PsqlJsonCompactAdaptor; +import org.nutz.dao.impl.jdbc.psql.PsqlJsonTidyAdaptor; + +@Table("t_psql_json_adaptor_test_bean") +public class PsqlJsonAdaptorTestBean { + + @Id + private int id; + + @ColDefine(customType = "jsonb", type = ColType.PSQL_JSON) + private StudentResult noneAdaptor; + + @ColDefine(customType = "json", type = ColType.PSQL_JSON, adaptor = PsqlJsonAdaptor.class) + private StudentResult jsonAdaptor; + + @ColDefine(customType = "json", type = ColType.PSQL_JSON, adaptor = PsqlJsonCompactAdaptor.class) + private StudentResult jsonCompactAdaptor; + + @ColDefine(customType = "json", type = ColType.PSQL_JSON, adaptor = PsqlJsonTidyAdaptor.class) + private StudentResult jsonTidyAdaptor; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public org.nutz.dao.test.normal.psql.StudentResult getNoneAdaptor() { + return noneAdaptor; + } + + public void setNoneAdaptor(StudentResult noneAdaptor) { + this.noneAdaptor = noneAdaptor; + } + + public StudentResult getJsonAdaptor() { + return jsonAdaptor; + } + + public void setJsonAdaptor(StudentResult jsonAdaptor) { + this.jsonAdaptor = jsonAdaptor; + } + + public StudentResult getJsonCompactAdaptor() { + return jsonCompactAdaptor; + } + + public void setJsonCompactAdaptor(StudentResult jsonCompactAdaptor) { + this.jsonCompactAdaptor = jsonCompactAdaptor; + } + + public StudentResult getJsonTidyAdaptor() { + return jsonTidyAdaptor; + } + + public void setJsonTidyAdaptor(StudentResult jsonTidyAdaptor) { + this.jsonTidyAdaptor = jsonTidyAdaptor; + } +} diff --git a/test/tmpl.nutz-test.properties b/test/tmpl.nutz-test.properties index 079705d6c2..b275966842 100644 --- a/test/tmpl.nutz-test.properties +++ b/test/tmpl.nutz-test.properties @@ -1,6 +1,6 @@ -driver=com.mysql.jdbc.Driver +driver=com.mysql.cj.jdbc.Driver #driver=org.mariadb.jdbc.Driver -url=jdbc:mysql://127.0.0.1/nutztest?zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8 +url=jdbc:mysql://127.0.0.1:3306/nutztest?zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8 username=root password=root @@ -21,7 +21,7 @@ password=root #url=jdbc:h2:mem: #driver=org.postgresql.Driver -#url=jdbc:postgresql://127.0.0.1:5433/nutztest +#url=jdbc:postgresql://127.0.0.1:5432/nutztest #username=postgres #password=root #validationQuery=select 1 @@ -33,4 +33,4 @@ password=root #driver=org.sqlite.JDBC #url=jdbc:sqlite:nutz.db #username=root -#password=root \ No newline at end of file +#password=root