Jenis konfigurasi lalai MybatisAliasesPackage tidak menyokong pakej imbasan biasa, jadi anda perlu mewarisi org.mybatis.spring.SqlSessionFactoryBean secara manual dan melaksanakan sendiri imbasan biasa traditional spring+mybatis Perbezaannya ialah seseorang perlu mewarisi kelas dan yang lain menggunakan pelaksanaan pengimbasan.
Untuk dua atau lebih laluan imbasan, contohnya:
cn.com.onethird.integration.entity
cn.com.onethird.business.entity
mybatis.typeAliasesPackage=cn.com.onethird.*.*.entity mybatis.mapperLocations=classpath:mapper/*.xml
package cn.com.onethird.nursinghome; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Properties; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; 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; import com.Application; /** * * @Title: MyBatisConfig.java * * @Package * @Description: mybtis实现正则扫描java bean包 * * @author * @date * @version V1.0 */ @Configuration @PropertySource("classpath:application.properties") public class MyBatisConfig { @Autowired private Environment env; static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; public static String setTypeAliasesPackage(String typeAliasesPackage) { ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory( resolver); typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/" + DEFAULT_RESOURCE_PATTERN; try { List<String> result = new ArrayList<String>(); 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); try { result.add(Class .forName(metadataReader.getClassMetadata().getClassName()) .getPackage().getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } if (result.size() > 0) { HashSet<String> h = new HashSet<String>(result); result.clear(); result.addAll(h); typeAliasesPackage = String.join("," ,(String[]) result.toArray(new String[0])); } else { throw new RuntimeException( "mybatis typeAliasesPackage 路径扫描错误, 参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); } } catch (IOException e) { e.printStackTrace(); } return typeAliasesPackage; } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { System.out.println(">>>>>>>>>>>配置[typeAliasesPackage,mapperLocations]START>>>>>>>>>>>>>>"); Properties props = new Properties(); String typeAliasesPackage = env .getProperty("mybatis.typeAliasesPackage"); String mapperLocations = env.getProperty("mybatis.mapperLocations"); typeAliasesPackage=setTypeAliasesPackage(typeAliasesPackage); final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage(typeAliasesPackage); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations)); System.out.println(">>>>>>>>>>>配置[typeAliasesPackage,mapperLocations]END>>>>>>>>>>>>>>"); return sessionFactory.getObject(); } public static void main(String[] args) throws Exception { setTypeAliasesPackage("cn.com.onethird.*.*.entity"); } }
typeAliasesPackage hanya boleh mengimbas laluan tertentu secara lalai, atau dipisahkan dengan koma kandungan di bawah beberapa laluan tidak menyokong kad bebas dan ungkapan biasa, dan diselesaikan dengan menulis semula
package com.xxxx.xxx.util.common; import com.xxxx.xxx.util.LogUtil; import org.apache.commons.lang3.StringUtils; import org.mybatis.spring.SqlSessionFactoryBean; import org.slf4j.Logger; 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; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2015/10/6. */ public class PackagesSqlSessionFactoryBean extends SqlSessionFactoryBean { static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; private static Logger logger = LogUtil.get(); @Override public void setTypeAliasesPackage(String typeAliasesPackage) { ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/" + DEFAULT_RESOURCE_PATTERN; //将加载多个绝对匹配的所有Resource //将首先通过ClassLoader.getResource("META-INF")加载非模式路径部分 //然后进行遍历模式匹配 try { List<String> result = new ArrayList<String>(); 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); try { result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } if(result.size() > 0) { super.setTypeAliasesPackage(StringUtils.join(result.toArray(), ",")); }else{ logger.warn("参数typeAliasesPackage:"+typeAliasesPackage+",未找到任何包"); } //logger.info("d"); } catch (IOException e) { e.printStackTrace(); } } }
<bean id="sqlSession" class="com.xxxx.xxxx.util.common.PackagesSqlSessionFactoryBean"> <property name="configLocation" value="classpath:config/sqlmap/sqlmap-config.xml" /> <property name="dataSource" ref="dataSource"/> <!--<property name="mapperLocations"--> <!--value="classpath*:com/xxxx/xxxx/merchant/**/domain/mapper/*.xml"/>--> <property name="typeAliasesPackage" value="com.xxxx.xxxx.custom.*.domain"/> <property name="plugins"> <array> <ref bean="pageInterceptor"/> </array> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.xxxx.xxxx.**.dao"/> </bean>
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengimbasan biasa typeAliasesPackage dalam Springboot+Mybatis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!