mybatis自动扫包,扫描不到jar包的解决方法
2017-04-28 09:16
435 查看
在开发中发现,mybatis的org.mybatis.spring.SqlSessionFactoryBean扫描包下的实体,扫描不到jar内同目录下的实体类。
在阅读相关博客中了解到可以手动在mybatis的config.xml里手动配置jar内的实体,但不推荐这样一个个配置!
在寻求解决办法的途中看到一篇mybatis通配符扫描博客点击打开链接
大致看来一遍,好像跟我的问题没什么关联。
但是之后又了解到了SqlSessionFactoryBean.setTypeAliases()这个方法。
之后还查询了一下 获取所有包的工具类(如果有的话肯定不用自己写
)
这是我最后用到的工具类 点击打开链接
下面是我在原博主工具类的基础上加了一个我自己业务需求的方法
以下是解决方案
ApplicationContext.xml配置。
如果有更好的解决,可以通过评论的交流一下
在阅读相关博客中了解到可以手动在mybatis的config.xml里手动配置jar内的实体,但不推荐这样一个个配置!
在寻求解决办法的途中看到一篇mybatis通配符扫描博客点击打开链接
大致看来一遍,好像跟我的问题没什么关联。
但是之后又了解到了SqlSessionFactoryBean.setTypeAliases()这个方法。
之后还查询了一下 获取所有包的工具类(如果有的话肯定不用自己写
)
这是我最后用到的工具类 点击打开链接
下面是我在原博主工具类的基础上加了一个我自己业务需求的方法
/** * 获取某包下所有类(,允许同时出现同路径类不同名) * @param packageName 包名 * @param isRecursion 是否遍历子包 * @return 类的完整名称 */ public static Set getAllClassName(String packageName, boolean isRecursion) { Set classNames = null; ClassLoader loader = Thread.currentThread().getContextClassLoader(); String packagePath = packageName.replace(".", "/"); URL url = loader.getResource(packagePath); if (url != null) { String protocol = url.getProtocol(); if (protocol.equals("file")) { classNames = getClassNameFromDir(url.getPath(), packageName, isRecursion); } else if (protocol.equals("jar")) { JarFile jarFile = null; try{ jarFile = ((JarURLConnection) url.openConnection()).getJarFile(); } catch(Exception e){ e.printStackTrace(); } if(jarFile != null){ getClassNameFromJar(jarFile.entries(), packageName, isRecursion); } } } /*从所有的jar包中查找包名*/ Set classNamesOfJar = getClassNameFromJars(((URLClassLoader)loader).getURLs(), packageName, isRecursion); if (classNames==null) { classNames = new HashSet(); } classNames.addAll(classNamesOfJar); return classNames; }
以下是解决方案
package com.flf.common; public class PackagesSqlSessionFactoryBean extends SqlSessionFactoryBean{ private final static Logger log = Logger.getLogger(PackagesSqlSessionFactoryBean.class); @Override public void setTypeAliasesPackage(String typeAliasesPackage) { Set list = PackageUtils.getAllClassName(typeAliasesPackage,false); Class[] classArray = new Class[list.size()]; int i = 0; for (String str : list) { try { classArray[i] = Class.forName(str); i++; } catch (ClassNotFoundException e) { e.printStackTrace(); } } super.setTypeAliases(classArray); } }
ApplicationContext.xml配置。
如果有更好的解决,可以通过评论的交流一下
相关文章推荐
- Spring自动扫描无法扫描jar包中bean的解决方法
- Spring自动扫描无法扫描jar包中bean的解决方法(转)
- spring 扫描不到jar中class文件的原因和解决方法
- Eclipse下maven项目自动打war包丢失jar包问题解决方法
- Spring扫描不到Progurd混淆的jar包问题解决
- ECLIPSE中MAVEN构建spring 多模块工程jar包不能自动扫描问题解决办法
- 扫描枪扫不到条码读不到条形码的解决方法
- [mybatis]自动扫描整个项目的mapper(并解决接口冲突)
- eclipse每天启动时maven 自动download jar包的pom解决方法
- 【mybatis】mapper.xml文件自动扫描注入的方法
- 在涉及maven时jar包自动导不上去解决方法
- maven不去自动下载jar包解决方法
- 使用eclipse export打jar包,web工程使用*读取配置读不到的问题解决方法
- 网页自动刷新,不产生嗒嗒声的一个解决方法
- windows2003不能自动分配USB移动硬盘盘符的解决方法:
- 电脑进入桌面就自动注销的解决方法
- VS2005中文输入法自动转换为全角的两种解决方法
- 关于双击硬盘自动加载病毒的解决方法
- DevExpress引用不到ImageSizeMode的解决方法
- VS2005中文输入法自动转换的解决方法