Przeglądaj źródła

修复值无法转换

zhou-hao 7 lat temu
rodzic
commit
2177e29a0a

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

@@ -22,6 +22,7 @@ import org.apache.commons.beanutils.BeanUtilsBean;
 import org.apache.commons.beanutils.PropertyUtilsBean;
 import org.apache.ibatis.mapping.ResultMap;
 import org.apache.ibatis.mapping.ResultMapping;
+import org.hswebframework.ezorm.core.ValueConverter;
 import org.hswebframework.ezorm.core.param.InsertParam;
 import org.hswebframework.ezorm.core.param.QueryParam;
 import org.hswebframework.ezorm.core.param.Term;
@@ -145,7 +146,14 @@ public class EasyOrmSqlBuilder {
         resultMappings.addAll(resultMaps.getIdResultMappings());
         resultMappings.forEach(resultMapping -> {
             if (resultMapping.getNestedQueryId() == null) {
-                RDBColumnMetaData column = new RDBColumnMetaData();
+                RDBColumnMetaData column = new RDBColumnMetaData(){
+                    @Override
+                    public RDBColumnMetaData clone() {
+                        RDBColumnMetaData target = super.clone();
+                        target.setValueConverter(getValueConverter());
+                        return target;
+                    }
+                };
                 column.setJdbcType(JDBCType.valueOf(resultMapping.getJdbcType().name()));
                 column.setName(resultMapping.getColumn());
                 if (!StringUtils.isNullOrEmpty(resultMapping.getProperty())) {
@@ -153,10 +161,19 @@ public class EasyOrmSqlBuilder {
                 }
                 column.setJavaType(resultMapping.getJavaType());
                 column.setProperty("resultMapping", resultMapping);
+                ValueConverter dateConvert=new DateTimeConverter("yyyy-MM-dd HH:mm:ss", column.getJavaType()){
+                    @Override
+                    public Object getData(Object value) {
+                        if(value instanceof Number){
+                            return new Date(((Number) value).longValue());
+                        }
+                        return super.getData(value);
+                    }
+                };
                 if (column.getJdbcType() == JDBCType.DATE) {
-                    column.setValueConverter(new DateTimeConverter("yyyy-MM-dd", column.getJavaType()));
+                    column.setValueConverter(dateConvert);
                 } else if (column.getJdbcType() == JDBCType.TIMESTAMP) {
-                    column.setValueConverter(new DateTimeConverter("yyyy-MM-dd HH:mm:ss", column.getJavaType()));
+                    column.setValueConverter(dateConvert);
                 } else if (column.getJdbcType() == JDBCType.NUMERIC) {
                     column.setValueConverter(new NumberValueConverter(column.getJavaType()));
                 }