zoukankan      html  css  js  c++  java
  • Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage

    typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决

    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
    import org.springframework.core.type.classreading.MetadataReader;
    import org.springframework.core.type.classreading.MetadataReaderFactory;
    import org.springframework.util.ClassUtils;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author Lucia
     * @description
     * @date 2018/7/24
     */
    public class Test extends SqlSessionFactoryBean {
    
        static final String DEFAULT_RESOURCE_APATTERN = "**/*.class";
    
        private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(Test.class);
    
        @Override
        public void setTypeAliasesPackage(String typeAliasesPackage) {
            ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
            MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
            typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage)
                    + "/" + DEFAULT_RESOURCE_APATTERN;
    
    
            try {
                List<String> result = new ArrayList<String>();
                //将加载多个绝对匹配的所有Resource
                //将首先通过ClassLoader.getResource("META-INF")加载非模式路径部分
                Resource[] resources = resourcePatternResolver.getResources(typeAliasesPackage);
                if (resources != null && resources.length > 0) {
                    MetadataReader metadataReader = null;
                    //然后进行遍历模式匹配
                    for (Resource resource : resources) {
                        if (resource.isReadable()) {
                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
                            try {
                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
                            } catch (ClassNotFoundException e1) {
                                e1.printStackTrace();
                            }
                        }
                    }
                }
                if (result.size() > 0) {
                    super.setTypeAliasesPackage(org.apache.commons.lang3.StringUtils.join(result.toArray(), ","));
                } else {
                    LOGGER.info("参数typeAliasesPackage:" + typeAliasesPackage + ",未找到任何包");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

      

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/lucia557/p/9358890.html
Copyright © 2011-2022 走看看