mybaits3.2.8 别名包扫描通配符

摘要:
3.2.8<mybatis.generator.version>/mybatis.generator.version>/SqlMapConfig.xml“</bean>导入org.springframework.core.io.Resource;
<mybatis.version>3.2.8</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.generator.version>1.3.2</mybatis.generator.version>

MBG

http://www.mybatis.org/spring/apidocs/reference/org/mybatis/spring/SqlSessionFactoryBean.html

这几天搭建了spring4.1.2+mybatis3.2.8一个简单的框架。

发现mybatis的SqlSessionFactoryBean可以配置typeAliasesPackage属性,自动为domain起别名。

如果我的domain在不同包下面,那么这个配置不支持通配符扫描包路径?如下改造:

改造前:applicationContext.xml配置:

[html] view plain copy
 
  1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  2.     <property name="dataSource" ref="dataSource" />  
  3.     <property name="configLocation" value="classpath:/SqlMapConfig.xml"></property>  
  4.     <property name="mapperLocations" value="classpath*:/sqlmaps/**/*-sql.xml"></property>  
  5.     <property name="typeAliasesPackage" value="com.demo.domain" />  
  6. </bean>  


改造后:applicationContext.xml配置:

[html] view plain copy
 
  1. <bean id="sqlSessionFactory" class="com.demo.core.mybatis.TQSqlSessionFactoryBean">  
  2.     <property name="dataSource" ref="dataSource" />  
  3.     <property name="configLocation" value="classpath:/SqlMapConfig.xml"></property>  
  4.     <property name="mapperLocations" value="classpath*:/sqlmaps/**/*-sql.xml"></property>  
  5.     <property name="typeAliasesPackage" value="com.demo.**.domain" />  
  6. </bean>  


com.demo.core.mybatis.TQSqlSessionFactoryBean类源码:

[java] view plain copy
 
  1. package com.demo.core.mybatis;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.mybatis.spring.SqlSessionFactoryBean;  
  7. import org.slf4j.Logger;  
  8. import org.slf4j.LoggerFactory;  
  9. import org.springframework.core.io.Resource;  
  10. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;  
  11. import org.springframework.core.io.support.ResourcePatternResolver;  
  12.   
  13. import com.demo.core.utils.StringUtil;  
  14.   
  15. /** 
  16.  * @ClassName: TQSqlSessionFactoryBean 
  17.  * @Description: mybatis自动扫描别名路径(新增通配符匹配功能) 
  18.  * @author wangxiaohu wsmalltiger@163.com 
  19.  * @date 2014年12月9日 上午9:36:23 
  20.  */  
  21. public class TQSqlSessionFactoryBean extends SqlSessionFactoryBean {  
  22.     Logger logger = LoggerFactory.getLogger(getClass());  
  23.     private static final String ROOT_PATH = "com" + File.separator + "demo"  
  24.             + File.separator;  
  25.     private static final String ROOT_PATH_SPLIT = ",";  
  26.     private static final String[] PATH_REPLACE_ARRAY = { "]" };  
  27.   
  28.     public void setTypeAliasesPackage(String typeAliasesPackage) {  
  29.         if (!StringUtil.isStringAvaliable(typeAliasesPackage)) {  
  30.             super.setTypeAliasesPackage(typeAliasesPackage);  
  31.             return;  
  32.         }  
  33.         ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();  
  34.         StringBuffer typeAliasesPackageStringBuffer = new StringBuffer();  
  35.         try {  
  36.             for (String location : typeAliasesPackage.split(",")) {  
  37.                 if (!StringUtil.isStringAvaliable(location)) {  
  38.                     continue;  
  39.                 }  
  40.                 location = "classpath*:"  
  41.                         + location.trim().replace(".", File.separator);  
  42.                 typeAliasesPackageStringBuffer.append(getResources(resolver,  
  43.                         location));  
  44.             }  
  45.         } catch (IOException e) {  
  46.             logger.error(e.getMessage(), e);  
  47.         }  
  48.         if ("".equals(typeAliasesPackageStringBuffer.toString())) {  
  49.             throw new RuntimeException(  
  50.                     "mybatis typeAliasesPackage 路径扫描错误!请检查applicationContext.xml@sqlSessionFactory配置!");  
  51.         }  
  52.         typeAliasesPackage = replaceResult(  
  53.                 typeAliasesPackageStringBuffer.toString()).replace(  
  54.                 File.separator, ".");  
  55.         super.setTypeAliasesPackage(typeAliasesPackage);  
  56.     }  
  57.   
  58.     private String getResources(ResourcePatternResolver resolver,  
  59.             String location) throws IOException {  
  60.         StringBuffer resourcePathStringBuffer = new StringBuffer();  
  61.         for (Resource resource : resolver.getResources(location)) {  
  62.             String description = resource == null ? "" : resource  
  63.                     .getDescription();  
  64.             if (!StringUtil.isStringAvaliable(resource.getDescription())  
  65.                     || description.indexOf(ROOT_PATH) == -1) {  
  66.                 continue;  
  67.             }  
  68.             resourcePathStringBuffer.append(  
  69.                     description.substring(description.indexOf(ROOT_PATH)))  
  70.                     .append(ROOT_PATH_SPLIT);  
  71.         }  
  72.         return resourcePathStringBuffer.toString();  
  73.     }  
  74.   
  75.     private String replaceResult(String resultStr) {  
  76.         for (String replaceStr : PATH_REPLACE_ARRAY) {  
  77.             resultStr = resultStr.replace(replaceStr, "");  
  78.         }  
  79.         return resultStr;  
  80.     }  
  81. }  

题外话:

typeAliasesPackage配置路径下的domain中可以添加@org.apache.ibatis.type.Alias(value = "user")注解;如果添加此注解,则别名使用此注解所指定的名称。如果没有配置,则默认为类名首字母小写。

http://blog.csdn.net/wsmalltiger/article/details/41825375

免责声明:文章转载自《mybaits3.2.8 别名包扫描通配符》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇8086CPU的结构与功能git 找回丢失的commit下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6956206.html  前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(七)——MyBatis延迟加载 1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据库压力,提高数据库性能。 mybatis提供一级缓存和二级缓存。 一级缓存...

Linux 配置Samba服务

查看系统下是否已经安装了sambarpm -qa |grep samba 安装sambayum -y install samba 配置samba创建目录sambamkdir -p /home/samba 修改samba权限chmod 777 /home/samba 关闭防火墙service iptables stop 配置smb.conf设置不需要密码访...

JedisCluster 链接redis集群

先贴代码: <!-- redis客户端 --><dependency>  <groupId>redis.clients</groupId>  <artifactId>jedis</artifactId>  <version>2.8.2</version><...

ScrollView的顶部下拉和底部上拉回弹效果

要实现ScrollView的回弹效果,需要对其进行触摸事件处理。先来看一下简单的效果: 根据Android的View事件分发处理机制,下面对dispatchTouchEvent进行详细分析: 在加载布局完成之后,获取ScrollView的第一个子元素,保存它的参数,left top right bottom参数,根据顶部下拉操作和底部上拉操作进行子Vie...

MQTT协议的简单介绍和服务器的安装

转:http://blog.csdn.net/djun100/article/details/25752491   最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽。 MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器...

Mybatis模糊查询MySQL中记录的的常用三种方法

mybatis的模糊查询功能使用的很广泛,以MySQL数据库为例(不同的数据库,有些可能不支持)常用的模糊查询有三种方法: 直接使用 % 拼接字符串,如'%'#{name}'%'或"%"#{name}"%",单引号或双引号都可以。 使用concat(str1,str2)函数拼接 使用mybatis的bind标签 现在有数据库mybatis1中表user...