您的位置:首页 > 编程语言 > Java开发

mybatis自动扫包,扫描不到jar包的解决方法

2017-04-28 09:16 435 查看
在开发中发现,mybatis的org.mybatis.spring.SqlSessionFactoryBean扫描包下的实体,扫描不到jar内同目录下的实体类。

在阅读相关博客中了解到可以手动在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配置。



如果有更好的解决,可以通过评论的交流一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis jar java class 扫描