extends org.mybatis.spring.SqlSessionFactoryBean
@Override setTypeAliasesPackage
code:
package com.bs.support;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;
public class SqlSessionFactorySupport extends SqlSessionFactoryBean {
private final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
@Override
public void setTypeAliasesPackage(String typeAliasesPackage) {
patternPackage(typeAliasesPackage);
}
protected void patternPackage(String packagePath) {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
String typeAliasesPackage = buildPackage(packagePath);
try {
Set<String> packages = new HashSet<String>(16);
Resource[] resources = resolver.getResources(typeAliasesPackage);
if (resources != null && resources.length > 0) {
MetadataReader metadataReader = null;
for (Resource resource : resources) {
if (resource.isReadable()) {
metadataReader = metadataReaderFactory.getMetadataReader(resource);
String className = metadataReader.getClassMetadata().getClassName();
String packageName = ClassUtils.getPackageName(className);
packages.add(packageName);
}
}
}
String aliasesPackage = packagePath;
if (packages.size() > 0) {
aliasesPackage = StringUtils.join(packages.toArray(), ",");
}
super.setTypeAliasesPackage(aliasesPackage);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
protected String buildPackage(String typeAliasesPackage) {
StringBuilder packageBuilder = new StringBuilder();
packageBuilder.append(ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX);
packageBuilder.append(ClassUtils.convertClassNameToResourcePath(typeAliasesPackage));
packageBuilder.append("/");
packageBuilder.append(DEFAULT_RESOURCE_PATTERN);
return packageBuilder.toString();
}
}
spring-->applicationContext.xml config:
<bean id="sqlSessionFactory" class="com.bs.support.SqlSessionFactorySupport">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="WEB-INF/config/mybatis-config.xml"/>
<property name="typeAliasesPackage" value="com.bs.app.*.entity" />
</bean>