mybaits3.2.8 别名包扫描通配符

<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

 

时间: 2024-08-19 08:39:17

mybaits3.2.8 别名包扫描通配符的相关文章

在Linux系统中安装使用恶意软件扫描工具及杀毒引擎的教程

  恶意软件是指任何旨在干扰或破坏计算系统正常运行的软件程序.虽然最臭名昭著的几种恶意软件如病毒.间谍软件和广告软件,但它们企图引起的危害不一:有的是窃取私密信息,有的是删除个人数据,有的则介于两者之间;而恶意软件的另一个常见用途就是控制系统,然后利用该系统发动僵尸网络,形成所谓的拒绝服务(DoS)攻击或分布式拒绝服务(DDoS)攻击. 换句话说,我们万万不可抱有这种想法"因为我并不存储任何敏感数据或重要数据,所以不需要保护自己的系统远离恶意软件",因为那些数据并不是恶意软件的唯一目标

SQL SERVER中什么情况会导致索引查找变成索引扫描

SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳.   1:隐式转换会导致执行计划从索引查找(Index Seek)变为索引扫描(Index Scan) Implicit Conversion will cause index scan instead of index seek. While implicit conversions occur in SQL Ser

微信扫描二维码登录网站代码

 用户通过扫描网页提供的二维码实现登陆信息获取,大家参考使用吧 请先下载  snoopy 类   代码如下: <?php /**  *  微信公众平台PHP-SDK  *  Wechatauth为非官方微信登陆API  *  用户通过扫描网页提供的二维码实现登陆信息获取  *  主要实现如下功能:  *  get_login_code() 获取登陆授权码, 通过授权码才能获取二维码  *  get_code_image($code='') 将上面获取的授权码转换为图片二维码  *  verify

Win7系统电脑将扫描文件变成为PDF格式的方法

  Win7系统电脑将扫描文件变成为PDF格式的方法 详细步骤如下: 1.首选下载"PDF-Tools"4.0的版本; 2.选中"直接扫描",然后点击右下角的"开始"按钮; 3.选择系统中的扫描仪,然后点击下一步; 4.耐心等待,扫描完成后即可得到PDF文件. 上述教程就是Win7系统电脑将扫描文件变成为PDF格式的方法,有需要的用户可参考本教程解决.

文件系统扫描的工具类

文件系统扫描的工具类   说明 递归扫描文件夹系统,并以树形结构组织起来 支持沙盒.bundle扫描 支持扫描深度设置 用File对象表示一个扫描出来的文件,File对象包含了一个文件或者文件夹的基本文件信息(如文件名字,是否隐藏,文件扩展名,文件url地址等等),便于后续操作 源码 https://github.com/YouXianMing/iOS-Utilities // // ViewController.m // FileManager // // Created by YouXian

微信扫描二维码后 图片加载不出来是怎么回事 标题是出来了 就是图片不能出来

问题描述 微信扫描二维码后 图片加载不出来是怎么回事 标题是出来了 就是图片不能出来 这个功能主要想是扫描二维码后 可以预览图片

Smart Crop,一种切除 PDF 扫描文档白边的新选择(工程篇)

周日深夜,我把代码分享到了 Github,用的 MIT 协议,详见 JamesPan/pdf-smart-crop.原本还想着把注释文档和单元测试写了再分享代码的,后来实在是懒了.所以说啊,这些东西如果开发的时候不好好写,以后就更没有动力去写了. 前作「Smart Crop,一种切除 PDF 扫描文档白边的新选择(算法篇)」分享了 Smart Crop 的算法设计.基本用法和脑洞,这里分享一下实现过程中遇到的问题和妥协. Why not Python 之前说过我在算法设计和调试阶段用的是 Pyt

一个二维码扫描自动识别下载应用

问题描述 一个二维码扫描自动识别下载应用 一个二维码扫描自动识别下载应用,看到过一些二维码,用安卓手机扫直接下载akp,用苹果手机扫跳转至appstore.这是如何实现的? 解决方案 很简单,二维码提供一个指向你网站的网页.但用户访问这个网页的时候,你通过用户请求的ua(user agent)判断用户的手机是android还是apple,并且分别跳转到不同的页面即可.二维码本身没有什么特殊的. 解决方案二: 只要二维码是一个APP的下载地址即刻

微信公众平台java开发关于微信扫描二维码的问题

问题描述 微信公众平台java开发关于微信扫描二维码的问题 某微信用户已经关注了我的公众号,然后他扫描了我公众平台的一个二维码,我想获取他的用户名,要怎么做?扫描二维码,是一个触发事件吗? 感谢各位了! 解决方案 他如果仅仅只是扫描的话,你是看不到他的用户名的.但是如果他关注了你的公众号,你在公众平台的用户管理里,是可以看到他的用户名信息的.希望能够帮到你. 解决方案二: 这个问题我自己研究的差不多了.用微信自己的扫一扫功能是不可能将事件推送给自己的公众平台的,我想它是推送事件给微信的公众平台了