From ee1f6d9d4fbe9d47ef60e12b59d1d1992ef061b8 Mon Sep 17 00:00:00 2001 From: D <3066417822@qq.com> Date: Sat, 20 Apr 2024 15:53:34 +0800 Subject: [PATCH] update --- .../main/resources/application-mybatis.yml | 21 +- .../ruoyi/framework/config/MyBatisConfig.java | 250 +++++++++--------- 2 files changed, 133 insertions(+), 138 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-mybatis.yml b/ruoyi-admin/src/main/resources/application-mybatis.yml index 7c78430..4bb5bde 100644 --- a/ruoyi-admin/src/main/resources/application-mybatis.yml +++ b/ruoyi-admin/src/main/resources/application-mybatis.yml @@ -1,3 +1,18 @@ +# MyBatis配置 +# mybatis: +# # 搜索指定包别名 +# typeAliasesPackage: com.ruoyi.**.domain +# # 配置mapper的扫描,找到所有的mapper.xml映射文件 +# mapperLocations: classpath*:mapper/**/*Mapper.xml +# # 加载全局的配置文件 +# configLocation: classpath:mybatis/mybatis-config.xml + + # PageHelper分页插件 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + # MyBatis Plus配置 mybatis-plus: # 搜索指定包别名 @@ -6,9 +21,3 @@ mybatis-plus: mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml - -# PageHelper分页插件 -pagehelper: - helperDialect: mysql - supportMethodsArguments: true - params: count=countSql \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java index 1de29ce..6a49b9a 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java @@ -1,132 +1,118 @@ -//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 allResult = new ArrayList(); -// try -// { -// for (String aliasesPackage : typeAliasesPackage.split(",")) -// { -// List result = new ArrayList(); -// 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 hashResult = new HashSet(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 resources = new ArrayList(); -// 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(); -// } -//} +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.boot.autoconfigure.condition.ConditionalOnProperty; +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 +@ConditionalOnProperty(prefix = "mybatis", name = { "typeAliasesPackage", "mapperLocations", + "configLocation" }, matchIfMissing = false) +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 allResult = new ArrayList(); + try { + for (String aliasesPackage : typeAliasesPackage.split(",")) { + List result = new ArrayList(); + 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 hashResult = new HashSet(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 resources = new ArrayList(); + 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(); + } +}