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