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配置:
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="configLocation" value="classpath:/SqlMapConfig.xml"></property>
- <property name="mapperLocations" value="classpath*:/sqlmaps/**/*-sql.xml"></property>
- <property name="typeAliasesPackage" value="com.demo.domain" />
- </bean>
改造后:applicationContext.xml配置:
- <bean id="sqlSessionFactory" class="com.demo.core.mybatis.TQSqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="configLocation" value="classpath:/SqlMapConfig.xml"></property>
- <property name="mapperLocations" value="classpath*:/sqlmaps/**/*-sql.xml"></property>
- <property name="typeAliasesPackage" value="com.demo.**.domain" />
- </bean>
com.demo.core.mybatis.TQSqlSessionFactoryBean类源码:
- package com.demo.core.mybatis;
- import java.io.File;
- import java.io.IOException;
- import org.mybatis.spring.SqlSessionFactoryBean;
- import org.slf4j.Logger;
- 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 com.demo.core.utils.StringUtil;
- /**
- * @ClassName: TQSqlSessionFactoryBean
- * @Description: mybatis自动扫描别名路径(新增通配符匹配功能)
- * @author wangxiaohu wsmalltiger@163.com
- * @date 2014年12月9日 上午9:36:23
- */
- public class TQSqlSessionFactoryBean extends SqlSessionFactoryBean {
- Logger logger = LoggerFactory.getLogger(getClass());
- private static final String ROOT_PATH = "com" + File.separator + "demo"
- + File.separator;
- private static final String ROOT_PATH_SPLIT = ",";
- private static final String[] PATH_REPLACE_ARRAY = { "]" };
- public void setTypeAliasesPackage(String typeAliasesPackage) {
- if (!StringUtil.isStringAvaliable(typeAliasesPackage)) {
- super.setTypeAliasesPackage(typeAliasesPackage);
- return;
- }
- ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
- StringBuffer typeAliasesPackageStringBuffer = new StringBuffer();
- try {
- for (String location : typeAliasesPackage.split(",")) {
- if (!StringUtil.isStringAvaliable(location)) {
- continue;
- }
- location = "classpath*:"
- + location.trim().replace(".", File.separator);
- typeAliasesPackageStringBuffer.append(getResources(resolver,
- location));
- }
- } catch (IOException e) {
- logger.error(e.getMessage(), e);
- }
- if ("".equals(typeAliasesPackageStringBuffer.toString())) {
- throw new RuntimeException(
- "mybatis typeAliasesPackage 路径扫描错误!请检查applicationContext.xml@sqlSessionFactory配置!");
- }
- typeAliasesPackage = replaceResult(
- typeAliasesPackageStringBuffer.toString()).replace(
- File.separator, ".");
- super.setTypeAliasesPackage(typeAliasesPackage);
- }
- private String getResources(ResourcePatternResolver resolver,
- String location) throws IOException {
- StringBuffer resourcePathStringBuffer = new StringBuffer();
- for (Resource resource : resolver.getResources(location)) {
- String description = resource == null ? "" : resource
- .getDescription();
- if (!StringUtil.isStringAvaliable(resource.getDescription())
- || description.indexOf(ROOT_PATH) == -1) {
- continue;
- }
- resourcePathStringBuffer.append(
- description.substring(description.indexOf(ROOT_PATH)))
- .append(ROOT_PATH_SPLIT);
- }
- return resourcePathStringBuffer.toString();
- }
- private String replaceResult(String resultStr) {
- for (String replaceStr : PATH_REPLACE_ARRAY) {
- resultStr = resultStr.replace(replaceStr, "");
- }
- return resultStr;
- }
- }
题外话:
typeAliasesPackage配置路径下的domain中可以添加@org.apache.ibatis.type.Alias(value = "user")注解;如果添加此注解,则别名使用此注解所指定的名称。如果没有配置,则默认为类名首字母小写。
http://blog.csdn.net/wsmalltiger/article/details/41825375
mybaits3.2.8 别名包扫描通配符的更多相关文章
- Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage
typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决 package com.xxxx.xxx.util.comm ...
- spring整合mybatis错误:class path resource [config/spring/springmvc.xml] cannot be opened because it does not exist
spring 整合Mybatis 运行环境:jdk1.7.0_17+tomcat 7 + spring:3.2.0 +mybatis:3.2.7+ eclipse 错误:class path reso ...
- Mybatis从认识到了解
目录 MyBatis的介绍 介绍: 为什么选择MyBatis: 与Hibernate的对比: MyBatis的优点: 入门示例 Mybatis核心组件 四大核心组件 SqlSessionFactory ...
- Mybatis-spring 动态代理
1.UserMapper.java package com.cn.mapper; import java.util.List; import com.cn.pojo.User; public inte ...
- Mybatis-spring 传统dao开发
jdbc.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?chara ...
- ssm学习的第一个demo---crm(1)
这是一个普通的CRM项目 (第一步规划好项目设计路线:导入jar包→配置sqlMapConfig.xml(空文件)→配置applicationContext.xml →配置springMVC.xml→ ...
- SpringMVC+Spring+MyBatis 整合与图片上传简单示例
一.思路: (一) Dao层: 1. SqlMapConfig.xml,空文件即可.需要文件头.2. applicationContext_dao.xml. a) 数据库连接池b) SqlSessio ...
- Mybatis和Spring整合&逆向工程
Mybatis和Spring整合&逆向工程Mybatis和Spring整合mybatis整合Spring的思路目的就是将在SqlMapConfig.xml中的配置移植到Spring的appli ...
- SpringMVC-Mybatis整合和注解开发
SpringMVC-Mybatis整合和注解开发SpringMVC-Mybatis整合整合的思路在mybatis和spring整合的基础上 添加springmvc.spring要管理springmvc ...
随机推荐
- mongodb修改器
mongodb修改器 转载自:http://blog.csdn.net/mcpang/article/details/7752736 mongodb修改器(\(inc/\)set/\(unset/\) ...
- schedule和scheduleAtFixedRate区别
需求: 由于系统长期运作,各设备之间产生很多信息,一段时间后需要清除数据 考虑方案: 用schedule还是scheduleAtFixedRate,在此比较分析了下这两个的区别 schedule和sc ...
- java 命名代码检查-注解处理器
命名代码检查 根据 <Java 语言规范( 第 3 版 ) > 中第6.8节的要求, Java 程序命名应当符合下列格式的书写规范: 类 ( 或接口 ) : 符合驼式命名法, 首字母大写. ...
- java加载机制整理
本文是根据李刚的<疯狂讲义>作的笔记,程序有的地方做了修改,特别是路径,一直在混淆,浪费了好多时间!!希望懂的同学能够指导本人,感激尽............ 1.jvm 和 类的关系 当 ...
- Promises与Javascript异步编程
Promises与Javascript异步编程 转载:http://www.zawaliang.com/2013/08/399.html 在如今都追求用户体验的时代,Ajax应用真的是无所不在.加上这 ...
- [百度空间] [转]程序员趣味读物:谈谈Unicode编码
出处:CSDN [ 2005-05-13 10:05:53 ] 作者:fmddlmyy 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG ...
- [工作记录] Android OpenGL ES: non-square texture - continue
previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...
- 使用CSS3实现3D图片滑块效果
使用 CSS3 的3D变换特性,我们可以通过让元素在三维空间中变换来实现一些新奇的效果. 这篇文章分享的这款 jQuery 立体图片滑块插件,利用了 3D transforms(变换)属性来实现多种不 ...
- 简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera
一.跨浏览器的网页设计一直是让人很头疼的问题,这不只是因为浏览器的版本众多,还有一个重要的原因是相同浏览器的不同时期的版本也会有差异,甚至是在不同操作同台上还会有不同.因此使CSS hack技术进行浏 ...
- vim使用指北 ---- Advanced Editing
本节介绍vi和ex的一些高级功能. 配置vi 配置文件.exrc可以保存在你的主目录下,在vi启动的时候执行这个配置文件.但在当前工作目录下可以放置一个配置文件,对当前目录做一个自定义配置. :set ...