com.github.pagehelper.PageException: 无法自动获取数据库类型,请通过 helperDialect 参数指定!
项目类型为springboot,使用了mybatis,切换数据库为dm后,项目启动正常,但进行分页查询时报错:Caused by: com.github.pagehelper.PageException: 无法自动获取数据库类型,请通过 helperDialect 参数指定!at com.github.pagehelper.page.PageAutoDialect.getDialect(PageA
·
项目类型为springboot,使用了mybatis,切换数据库为dm后,项目启动正常,但进行分页查询时报错:
Caused by: com.github.pagehelper.PageException: 无法自动获取数据库类型,请通过 helperDialect 参数指定!
at com.github.pagehelper.page.PageAutoDialect.getDialect(PageAutoDialect.java:206) ~[pagehelper-5.1.2.jar:na]
at com.github.pagehelper.page.PageAutoDialect.initDelegateDialect(PageAutoDialect.java:90) ~[pagehelper-5.1.2.jar:na]
at com.github.pagehelper.PageHelper.skip(PageHelper.java:65) ~[pagehelper-5.1.2.jar:na]
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:92) ~[pagehelper-5.1.2.jar:na]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.3.jar:3.5.3]
at com.sun.proxy.$Proxy259.query(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.3.jar:3.5.3]
... 86 common frames omitted
摸索过程及错误思路略。
正确解决办法为在application.yml中配置:
pagehelper:
dialect: com.github.pagehelper.dialect.helper.OracleDialect
至此,dm数据库中分页问题圆满解决。下面为源码分析:
在类PageInterceptor.java中尝试获取配置的方言pagehelper.dialect,如果获取失败,则用默认的方言PageHelper(汗!PageHelper是方言,而不是什么帮助类!)
private Dialect dialect;
private String default_dialect_class = "com.github.pagehelper.PageHelper";
......
@Override
public void setProperties(Properties properties) {
......
String dialectClass = properties.getProperty("dialect");
if (StringUtil.isEmpty(dialectClass)) {
dialectClass = default_dialect_class;
}
try {
Class<?> aClass = Class.forName(dialectClass);
dialect = (Dialect) aClass.newInstance();
} catch (Exception e) {
throw new PageException(e);
}
dialect.setProperties(properties);
......
}
后面更详细的代码分析略。
至于为什么指定的方言为oracleDialect,因为dm的分页方法与oracel一致啊~~~~~如果是与三大库不一样的,只能自己实现Dialect了,呵呵
更多推荐
已为社区贡献1条内容
所有评论(0)