竹山一叶

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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>    






posted on 2017-02-14 09:55  竹山一叶  阅读(12303)  评论(0编辑  收藏  举报