#指定Mybatis的Mapper文件 多地址逗号隔开,如多地址里有相同文件优先使用前面的
mybatis-plus.sql.mapper-locations=file:mapper/*xml,classpath*:mapper/*xml
@Bean(name = "sqlSqlSessionFactory")
public SqlSessionFactory sqlSqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dataSource) throws Exception {
// MyBatis-Plus使用MybatisSqlSessionFactoryBean MyBatis直接使用SqlSessionFactoryBean
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
// 给MyBatis-Plus注入数据源
bean.setDataSource(dataSource);
bean.setMapperLocations(resolveMapperLocations(sqlConfig.getMapperLocation()));
// MySQL分页插件 加动态表名配置
bean.setPlugins(mybatisPlusInterceptor());
return bean.getObject();
}
public Resource[] resolveMapperLocations(String mapperLocations) {
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
List<Resource> resources = new ArrayList<>();
List<Resource> distinctFilename = new ArrayList<>();
if (mapperLocations != null && mapperLocations.split(",") != null) {
for (String mapperLocation : mapperLocations.split(",")) {
try {
Resource[] mappers = resourceResolver.getResources(mapperLocation);
resources.addAll(Arrays.asList(mappers));
} catch (Exception e) {
}
}
distinctFilename = getDistinctFilename(resources);
}
return distinctFilename.toArray(new Resource[distinctFilename.size()]);
}
public List<Resource> getDistinctFilename(List<Resource> list) {
Map<String, Integer> map = new HashMap<>();
List<Resource> distinctResource = new ArrayList<>();
for (Resource resource : list) {
String s = resource.getFilename();
if (map.get(s) == null || map.get(s) == 0) {
map.put(s, 1);
distinctResource.add(resource);
}
}
return distinctResource;
}