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();
            }
        }
    }
    

      

  • 相关阅读:
    【转】高级爬虫
    python-基于遗传算法的多三角形拟合图像实例
    python-文件处理
    python-函数式编程与内置函数
    Python-变量、函数及递归
    Python-字符串的拼接与函数
    Python-集合
    Python-列表、元组、字典
    Python-字符串2
    Python-字符串
  • 原文地址:https://www.cnblogs.com/lucia557/p/9358890.html
Copyright © 2011-2022 走看看