| package com.ruoyi.framework.config; | 
|   | 
| import java.io.IOException; | 
| import java.util.ArrayList; | 
| import java.util.Arrays; | 
| import java.util.HashSet; | 
| import java.util.List; | 
| import javax.sql.DataSource; | 
| import org.apache.ibatis.io.VFS; | 
| import org.apache.ibatis.session.SqlSessionFactory; | 
| import org.mybatis.spring.SqlSessionFactoryBean; | 
| import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.context.annotation.Bean; | 
| import org.springframework.context.annotation.Configuration; | 
| import org.springframework.core.env.Environment; | 
| import org.springframework.core.io.DefaultResourceLoader; | 
| 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.ruoyi.common.utils.StringUtils; | 
|   | 
| /** | 
|  * Mybatis支持*匹配扫描包 | 
|  *  | 
|  * @author ruoyi | 
|  */ | 
| @Configuration | 
| 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); | 
|         List<String> allResult = new ArrayList<String>(); | 
|         try | 
|         { | 
|             for (String aliasesPackage : typeAliasesPackage.split(",")) | 
|             { | 
|                 List<String> result = new ArrayList<String>(); | 
|                 aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX | 
|                         + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; | 
|                 Resource[] resources = resolver.getResources(aliasesPackage); | 
|                 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> hashResult = new HashSet<String>(result); | 
|                     allResult.addAll(hashResult); | 
|                 } | 
|             } | 
|             if (allResult.size() > 0) | 
|             { | 
|                 typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); | 
|             } | 
|             else | 
|             { | 
|                 throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); | 
|             } | 
|         } | 
|         catch (IOException e) | 
|         { | 
|             e.printStackTrace(); | 
|         } | 
|         return typeAliasesPackage; | 
|     } | 
|   | 
|     public Resource[] resolveMapperLocations(String[] mapperLocations) | 
|     { | 
|         ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); | 
|         List<Resource> resources = new ArrayList<Resource>(); | 
|         if (mapperLocations != null) | 
|         { | 
|             for (String mapperLocation : mapperLocations) | 
|             { | 
|                 try | 
|                 { | 
|                     Resource[] mappers = resourceResolver.getResources(mapperLocation); | 
|                     resources.addAll(Arrays.asList(mappers)); | 
|                 } | 
|                 catch (IOException e) | 
|                 { | 
|                     // ignore | 
|                 } | 
|             } | 
|         } | 
|         return resources.toArray(new Resource[resources.size()]); | 
|     } | 
|   | 
| //    @Bean | 
| //    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception | 
| //    { | 
| //        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); | 
| //        String mapperLocations = env.getProperty("mybatis.mapperLocations"); | 
| //        String configLocation = env.getProperty("mybatis.configLocation"); | 
| //        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); | 
| //        VFS.addImplClass(SpringBootVFS.class); | 
| // | 
| //        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); | 
| //        sessionFactory.setDataSource(dataSource); | 
| //        sessionFactory.setTypeAliasesPackage(typeAliasesPackage); | 
| //        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); | 
| //        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); | 
| //        return sessionFactory.getObject(); | 
| //    } | 
| } |