我是靠谱客的博主 高挑星月,最近开发中收集的这篇文章主要介绍Spring/SpringBoot使用多数据源时,导致Mybatis插件PagerHelper失效问题解决方案1. 配置插件2.装载插件3. 主要事项,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
笔者在使用多数据源后,出现MyBatis插件PageHelper完全失效的问题,导致每次查询都不进行翻页,查询处所有的数据。这是因为配置多数据源时,必然要重写SqlSessionFactory(MyBatis的接口),这就导致默认的插件加载失效,此时就需要重新绑定PageHelper插件了。
1. 配置插件
/**
* 配置插件
*
* @return bean
*/
@Bean(name = "plugins")
public Interceptor[] plugins() {
//org.apache.ibatis.plugin.Interceptor
Interceptor interceptor = new PageInterceptor();
//java.util.Properties
Properties properties = new Properties();
//是否将参数offset作为pageNum
properties.setProperty("offsetAsPageNum", "true");
// 数据库类型
properties.setProperty("helperDialect", "mysql");
// 是否返回行数,相当于MySQL的count(*)
properties.setProperty("rowBoundsWithCount", "true");
// 是否分页合理化:即翻页小于0时,显示第一页数据,翻页数较大查不到数据时,显示最后一页的数据,默认即为false,本处显示写出,以供参考。
properties.setProperty("reasonable", "false");
interceptor.setProperties(properties);
Interceptor[] plugins = new Interceptor[1];
plugins[0] = interceptor;
return plugins;
}
2.装载插件
/**
* sql工厂(通过名称来注入)
*
* @param defaultSource
*
默认数据源
* @param otherSource
*
其他的数据源
* @return bean
* @throws Exception
*
异常
*/
@Bean(name = "sessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("defaultSource") DataSource defaultSource, @Qualifier("otherSource") DataSource otherSource)
throws Exception {
//org.mybatis.spring.SqlSessionFactoryBean
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dynamicDataSource(defaultSource, otherSource));
// 配置xml文件的路径
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*/*.xml"));
//装载/设置插件,本步骤必须在sqlSessionFactoryBean.getObject()之前执行
sqlSessionFactoryBean.setPlugins(plugins());
//返回工厂
org.apache.ibatis.session.Configuration configuration = sqlSessionFactoryBean.getObject().getConfiguration();
//通过set方法配置相关的属性,还可以自己继续补加
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCallSettersOnNulls(true);
return sqlSessionFactoryBean.getObject();
}
3. 主要事项
- sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“classpath:mapper//.xml”)); 负责加载xml路径下的sql文件,既然自定义了数据源,properties文件中的xml文件同样也不起作用。
- sqlSessionFactoryBean.setPlugins(plugins()); 是设置插件的步骤,一定要写在sqlSessionFactoryBean.getObject()方法执行之前,不然不起作用,原因很简单,就好比我们的set和get方法,先get后在去set和先set后get得到的值是不一样的。
最后
以上就是高挑星月为你收集整理的Spring/SpringBoot使用多数据源时,导致Mybatis插件PagerHelper失效问题解决方案1. 配置插件2.装载插件3. 主要事项的全部内容,希望文章能够帮你解决Spring/SpringBoot使用多数据源时,导致Mybatis插件PagerHelper失效问题解决方案1. 配置插件2.装载插件3. 主要事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复