• Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage


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

    1. package com.xxxx.xxx.util.common;    
    2.     
    3. import com.xxxx.xxx.util.LogUtil;    
    4. import org.apache.commons.lang3.StringUtils;    
    5. import org.mybatis.spring.SqlSessionFactoryBean;    
    6. import org.slf4j.Logger;    
    7. import org.springframework.core.io.Resource;    
    8. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;    
    9. import org.springframework.core.io.support.ResourcePatternResolver;    
    10. import org.springframework.core.type.classreading.CachingMetadataReaderFactory;    
    11. import org.springframework.core.type.classreading.MetadataReader;    
    12. import org.springframework.core.type.classreading.MetadataReaderFactory;    
    13. import org.springframework.util.ClassUtils;    
    14.     
    15. import java.io.IOException;    
    16. import java.util.ArrayList;    
    17. import java.util.List;    
    18.     
    19. /**   
    20.  * Created by Administrator on 2015/10/6.   
    21.  */    
    22. public class PackagesSqlSessionFactoryBean extends SqlSessionFactoryBean {    
    23.     
    24.     static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";    
    25.     
    26.     private static Logger logger = LogUtil.get();    
    27.     
    28.     @Override    
    29.     public void setTypeAliasesPackage(String typeAliasesPackage) {    
    30.         ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();    
    31.         MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);    
    32.         typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +    
    33.                 ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/" + DEFAULT_RESOURCE_PATTERN;    
    34.     
    35.         //将加载多个绝对匹配的所有Resource    
    36.         //将首先通过ClassLoader.getResource("META-INF")加载非模式路径部分    
    37.         //然后进行遍历模式匹配    
    38.         try {    
    39.             List<String> result = new ArrayList<String>();    
    40.             Resource[] resources =  resolver.getResources(typeAliasesPackage);    
    41.             if(resources != null && resources.length > 0){    
    42.                 MetadataReader metadataReader = null;    
    43.                 for(Resource resource : resources){    
    44.                     if(resource.isReadable()){    
    45.                        metadataReader =  metadataReaderFactory.getMetadataReader(resource);    
    46.                         try {    
    47.                             result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());    
    48.                         } catch (ClassNotFoundException e) {    
    49.                             e.printStackTrace();    
    50.                         }    
    51.                     }    
    52.                 }    
    53.             }    
    54.             if(result.size() > 0) {    
    55.                 super.setTypeAliasesPackage(StringUtils.join(result.toArray(), ","));    
    56.             }else{    
    57.                 logger.warn("参数typeAliasesPackage:"+typeAliasesPackage+",未找到任何包");    
    58.             }    
    59.             //logger.info("d");    
    60.         } catch (IOException e) {    
    61.             e.printStackTrace();    
    62.         }    
    63.     }    
    64.     
    65. }    

    然后在mybatis的配置文件中修改

    1. <bean id="sqlSession" class="com.xxxx.xxxx.util.common.PackagesSqlSessionFactoryBean">    
    2.         <property name="configLocation" value="classpath:config/sqlmap/sqlmap-config.xml" />    
    3.         <property name="dataSource" ref="dataSource"/>    
    4.         <!--<property name="mapperLocations"-->    
    5.                   <!--value="classpath*:com/xxxx/xxxx/merchant/**/domain/mapper/*.xml"/>-->    
    6.         <property name="typeAliasesPackage" value="com.xxxx.xxxx.custom.*.domain"/>    
    7.         <property name="plugins">    
    8.             <array>    
    9.                 <ref bean="pageInterceptor"/>    
    10.             </array>    
    11.         </property>    
    12.     </bean>    
    13.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">    
    14.         <property name="basePackage" value="com.xxxx.xxxx.**.dao"/>    
    15.     </bean>    






  • 相关阅读:
    003. 爬楼梯
    ZFlie网盘框架说明
    WPF基础:Dispatcher介绍
    WPF自定义控件三:消息提示框
    GO Time 类型方法处理集合
    UserControl 加载动画
    WPF自定义控件二:Border控件与TextBlock控件轮播动画
    WPF自定义控件一:StackPanel 控件轮播
    WPF 图表控件之曲线绘制与移动
    VueApp 自动更新解决plus is not defined问题
  • 原文地址:https://www.cnblogs.com/jeffen/p/6396319.html
Copyright © 2020-2023  润新知