Procházet zdrojové kódy

修改在resultMapping中自定义typeHandler可能失效问题 #150

zhou-hao před 5 roky
rodič
revize
50e6fc1b7f

+ 5 - 7
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/EasyOrmSqlBuilder.java

@@ -180,15 +180,13 @@ public class EasyOrmSqlBuilder {
                     ? columnName.concat(".").concat(resultMapping.getColumn()) : resultMapping.getColumn());
             column.setJavaType(resultMapping.getJavaType());
 
-//            if (resultMapping.getTypeHandler() != null) {
-//                column.setProperty("typeHandler", resultMapping.getTypeHandler().getClass().getName());
-//            }
+            if (resultMapping.getTypeHandler() != null) {
+                column.setProperty("typeHandler", resultMapping.getTypeHandler().getClass().getName());
+            }
             if (!StringUtils.isNullOrEmpty(resultMapping.getProperty())) {
                 column.setAlias(org.springframework.util.StringUtils.hasText(prefix)
                         ? prefix.concat(".").concat(resultMapping.getProperty()) : resultMapping.getProperty());
-
             }
-
             column.setProperty("resultMapping", resultMapping);
             metaData.add(column);
         }
@@ -226,7 +224,7 @@ public class EasyOrmSqlBuilder {
                 .forEach(rdbTableMetaData::addColumn);
 
         if (useJpa) {
-            Class type = entityFactory == null ? resultMaps.getType() : entityFactory.getInstanceType(resultMaps.getType());
+            Class<?> type = entityFactory == null ? resultMaps.getType() : entityFactory.getInstanceType(resultMaps.getType());
             RDBTableMetaData parseResult = JpaAnnotationParser.parseMetaDataFromEntity(type);
             if (parseResult != null) {
                 for (RDBColumnMetaData columnMetaData : parseResult.getColumns()) {
@@ -240,7 +238,7 @@ public class EasyOrmSqlBuilder {
         }
         for (RDBColumnMetaData column : rdbTableMetaData.getColumns()) {
             //fix 150
-            TypeHandler handler = MybatisUtils.getSqlSession().getConfiguration().getTypeHandlerRegistry()
+            TypeHandler<?> handler = MybatisUtils.getSqlSession().getConfiguration().getTypeHandlerRegistry()
                     .getTypeHandler(column.getJavaType(), JdbcType.forCode(column.getJdbcType().getVendorTypeNumber()));
             if (handler != null) {
                 column.setProperty("typeHandler", handler.getClass().getName());

+ 6 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java

@@ -1,6 +1,9 @@
 package org.hswebframework.web.dao.crud;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.persistence.Column;
 
@@ -10,6 +13,9 @@ import javax.persistence.Column;
  * @since
  */
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class NestEntity {
 
     @Column

+ 5 - 1
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestCrud.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.dao.crud;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.SneakyThrows;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.hswebframework.ezorm.core.param.QueryParam;
@@ -21,6 +22,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.sql.SQLException;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 @RunWith(SpringRunner.class)
@@ -50,7 +52,8 @@ public class TestCrud extends AbstractTransactionalJUnit4SpringContextTests {
                 "  name VARCHAR(32) ,\n" +
                 "  create_time DATETIME,\n" +
                 "  data_type SMALLINT,\n" +
-                "  data_types BIGINT\n" +
+                "  data_types BIGINT,\n" +
+                "  json_field CLOB" +
                 ")");
         sqlExecutor.exec("\n" +
                 "create table h_nest_table(\n" +
@@ -69,6 +72,7 @@ public class TestCrud extends AbstractTransactionalJUnit4SpringContextTests {
         entity.setName("测试");
         entity.setDataType(DataType.TYPE1);
         entity.setDataTypes(new DataType[]{DataType.TYPE1, DataType.TYPE3});
+        entity.setJsonField(new JSONObject(Collections.singletonMap("test","test")));
         testDao.insert(entity);
         Assert.assertNotNull(entity.getId());
         sqlExecutor.insert("insert into h_nest_table (id,name) values(#{id},'1234')",entity);

+ 2 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestEntity.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.dao.crud;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -50,4 +51,5 @@ public class TestEntity implements org.hswebframework.web.commons.entity.Entity
     @CollectionTable(name = "nest_table2")
     private NestEntity nest2;
 
+    private JSONObject jsonField;
 }

+ 2 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/org/hswebframework/web/dao/test/TestDao.xml

@@ -6,6 +6,8 @@
         <id property="id" column="id" javaType="Long" jdbcType="INTEGER"/>
         <id property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
         <id property="dataType" column="data_type" javaType="org.hswebframework.web.dao.crud.DataType" jdbcType="BIGINT"/>
+        <id property="jsonField" column="json_field" typeHandler="org.hswebframework.web.dao.mybatis.handler.JsonMapHandler"
+            javaType="com.alibaba.fastjson.JSONObject" jdbcType="CLOB"/>
 
     </resultMap>