Parcourir la source

优化类型判断

zhouhao il y a 6 ans
Parent
commit
8e4ec95228

+ 1 - 6
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MyBatisAutoConfiguration.java

@@ -31,9 +31,6 @@ import org.mybatis.spring.SqlSessionFactoryBean;
 import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
 import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
@@ -109,7 +106,7 @@ public class MyBatisAutoConfiguration {
         factory.setMapperLocations(mybatisProperties.resolveMapperLocations());
 
         SqlSessionFactory sqlSessionFactory = factory.getObject();
-        MybatisUtils.sqlSession=sqlSessionFactory;
+        MybatisUtils.sqlSession = sqlSessionFactory;
 
         EnumDictHandlerRegister.typeHandlerRegistry = sqlSessionFactory.getConfiguration().getTypeHandlerRegistry();
         EnumDictHandlerRegister.register("org.hswebframework.web;" + mybatisProperties.getTypeHandlersPackage());
@@ -121,8 +118,6 @@ public class MyBatisAutoConfiguration {
         }
         EasyOrmSqlBuilder.getInstance().entityFactory = entityFactory;
 
-        sqlSessionFactory.getConfiguration().getTypeAliasRegistry();
-
         return sqlSessionFactory;
     }
 

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

@@ -175,20 +175,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());
+                //时间
+                if (column.getJdbcType() == JDBCType.DATE || column.getJdbcType() == JDBCType.TIMESTAMP) {
+                    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);
                         }
-                        return super.getData(value);
-                    }
-                };
-                if (column.getJdbcType() == JDBCType.DATE) {
-                    column.setValueConverter(dateConvert);
-                } else if (column.getJdbcType() == JDBCType.TIMESTAMP) {
+                    };
                     column.setValueConverter(dateConvert);
-                } else if (column.getJdbcType() == JDBCType.NUMERIC) {
+                } else if (TypeUtils.isNumberType(column)) { //数字
                     column.setValueConverter(new NumberValueConverter(column.getJavaType()));
                 }
                 rdbTableMetaData.addColumn(column);

+ 38 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/TypeUtils.java

@@ -0,0 +1,38 @@
+package org.hswebframework.web.dao.mybatis.builder;
+
+import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.JDBCType;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author zhouhao
+ * @since 3.0.3
+ */
+public class TypeUtils {
+    private static final List<Class> numberType = Arrays.asList(
+            byte.class, Byte.class
+            , short.class, Short.class
+            , int.class, Integer.class
+            , float.class, Float.class
+            , double.class, Double.class
+            , long.class, Long.class
+            , BigDecimal.class, BigInteger.class
+    );
+
+    private static final List<JDBCType> numberJdbcType = Arrays.asList(
+            JDBCType.TINYINT, JDBCType.DECIMAL, JDBCType.NUMERIC,
+            JDBCType.BIGINT, JDBCType.SMALLINT, JDBCType.INTEGER,
+            JDBCType.DECIMAL, JDBCType.BIT
+    );
+
+    public static boolean isNumberType(RDBColumnMetaData columnMetaData) {
+        return numberType.contains(columnMetaData.getJavaType())
+                || Number.class.isAssignableFrom(columnMetaData.getJavaType())
+                || numberJdbcType.contains(columnMetaData.getJdbcType());
+    }
+
+}

+ 2 - 24
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParser.java

@@ -8,6 +8,7 @@ import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData;
 import org.hswebframework.ezorm.rdb.meta.converter.DateTimeConverter;
 import org.hswebframework.ezorm.rdb.meta.converter.NumberValueConverter;
 import org.hswebframework.utils.ClassUtils;
+import org.hswebframework.web.dao.mybatis.builder.TypeUtils;
 import org.hswebframework.web.dict.EnumDict;
 import org.springframework.core.annotation.AnnotationUtils;
 
@@ -35,28 +36,10 @@ import java.util.function.Function;
  */
 public class JpaAnnotationParser {
 
-    private static final Map<Class, RDBTableMetaData> metaDataCache = new ConcurrentHashMap<>(256);
-
     private static final Map<Class, JDBCType> jdbcTypeMapping = new HashMap<>();
 
     private static final List<BiFunction<Class, PropertyDescriptor, JDBCType>> jdbcTypeConvert = new ArrayList<>();
 
-    private static final List<Class> numberType = Arrays.asList(
-            byte.class, Byte.class
-            , short.class, Short.class
-            , int.class, Integer.class
-            , float.class, Float.class
-            , double.class, Double.class
-            , long.class, Long.class
-            , BigDecimal.class, BigInteger.class
-    );
-
-    private static final List<JDBCType> numberJdbcType = Arrays.asList(
-            JDBCType.TINYINT, JDBCType.DECIMAL, JDBCType.NUMERIC,
-            JDBCType.BIGINT, JDBCType.SMALLINT, JDBCType.INTEGER,
-            JDBCType.DECIMAL, JDBCType.BIT
-    );
-
     static {
         jdbcTypeMapping.put(String.class, JDBCType.VARCHAR);
 
@@ -121,11 +104,6 @@ public class JpaAnnotationParser {
         });
     }
 
-    public static boolean isNumberType(RDBColumnMetaData columnMetaData) {
-        return numberType.contains(columnMetaData.getJavaType())
-                || Number.class.isAssignableFrom(columnMetaData.getJavaType())
-                || numberJdbcType.contains(columnMetaData.getJdbcType());
-    }
 
     public static RDBTableMetaData parseMetaDataFromEntity(Class entityClass) {
         Table table = AnnotationUtils.findAnnotation(entityClass, Table.class);
@@ -174,7 +152,7 @@ public class JpaAnnotationParser {
             if (columnMetaData.getJdbcType() == JDBCType.DATE
                     || columnMetaData.getJdbcType() == JDBCType.TIMESTAMP) {
                 columnMetaData.setValueConverter(dateConvert);
-            } else if (isNumberType(columnMetaData)) {
+            } else if (TypeUtils.isNumberType(columnMetaData)) {
                 columnMetaData.setValueConverter(new NumberValueConverter(columnMetaData.getJavaType()));
             }
 

+ 15 - 4
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/SqlParamParserTest.java

@@ -2,19 +2,19 @@ package org.hswebframework.web.dao.mybatis.builder;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.*;
 import org.hswebframework.ezorm.core.param.Term;
 import org.hswebframework.web.commons.entity.QueryEntity;
 import org.hswebframework.web.commons.entity.param.QueryParamEntity;
 import org.junit.Assert;
 import org.junit.Test;
+import org.springframework.asm.ClassReader;
 
+import java.lang.invoke.LambdaMetafactory;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.function.Function;
 
 import static org.junit.Assert.*;
 
@@ -23,6 +23,17 @@ import static org.junit.Assert.*;
  * @since 1.0
  */
 public class SqlParamParserTest {
+    @SneakyThrows
+    public static <T> void test(Function<T, Object> function) {
+        Class t=function.getClass();
+
+        System.out.println(t);
+    }
+
+    public static void main(String[] args) {
+        test(TestQueryEntity::getName$like);
+    }
+
 
     @Test
     public void testParseQueryParam() {