mybatis 模糊匹配 不同包下的实体类

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>

猜你喜欢

转载自my.oschina.net/u/1434882/blog/1786942
今日推荐