com.githubpagehelper.PageException: 使用PageHelper分页插件时,必须设置helper属性。
pagehelper.helper-dialect=mysql
PageHelper.startPage(page, limit).using("mysql");
List list= mapper.list();
PageInfo<U> pageInfo = new PageInfo<>(list);
helper针对dialect的处理机制:默认它会通过配置的连接串用mysql去识别,换了连接串后,需要通过配置文件指定mysql。 配置文件的参数,有横线和驼峰的区别(1.4.4之前,有bug,只能识别驼峰式的配置);
public static AbstractHelperDialect instanceDialect(String dialectClass, Properties properties) {
AbstractHelperDialect dialect;
if (StringUtil.isEmpty(dialectClass)) {
throw new PageException("使用 PageHelper 分页插件时,必须设置 helper 属性");
}
public AbstractHelperDialect extractDialect(String dialectKey, MappedStatement ms, DataSource dataSource, Properties properties) {
String dialect = PageAutoDialect.fromJdbcUrl(dialectKey);
return PageAutoDialect.instanceDialect(dialect, properties);
}
public static String fromJdbcUrl(String jdbcUrl) {
final String url = jdbcUrl.toLowerCase();
for (String dialect : dialectAliasMap.keySet()) {
if (url.contains(":" + dialect.toLowerCase() + ":")) {
return dialect;
}
}
return null;
}
static {
//注册别名
registerDialectAlias("hsqldb", HsqldbDialect.class);
registerDialectAlias("h2", HsqldbDialect.class);
registerDialectAlias("phoenix", HsqldbDialect.class);
registerDialectAlias("postgresql", PostgreSqlDialect.class);
registerDialectAlias("mysql", MySqlDialect.class);
registerDialectAlias("mariadb", MySqlDialect.class);
registerDialectAlias("sqlite", MySqlDialect.class);
registerDialectAlias("herddb", HerdDBDialect.class);
registerDialectAlias("oracle", OracleDialect.class);
registerDialectAlias("oracle9i", Oracle9iDialect.class);
registerDialectAlias("db2", Db2Dialect.class);
...
可以看到,pagehelper默认是通过jdbc的url去自动识别dialect。例如mysql的,它会用":mysql:"去匹配有没有对应的dialect。 而第三方驱动的jdbc连接串用的是 ":xxxxx:",这个pagehelper默认是没有的,因此不能用自动识别。 要在配置文件中指定dialect,指定用mysql就可以了,是兼容的。 问题在于helper这个包,在1.4.4版本之前,它只能识别驼峰式配置。