net.jrouter.paging.jdbc.dialect.Dialect Maven / Gradle / Ivy
package net.jrouter.paging.jdbc.dialect;
/**
* 数据库语义工具。
*/
public abstract class Dialect {
/**
* 依据原生SQL生成数据库简易的Count语句。
*
* @param sql 原生SQL语句。
*
* @return 转换后的Count语句。
*/
public static String getSimpleCountLimitSQL(String sql) {
return "select count(*) from (" + sql + ") tmp_count";
}
/**
* 依据原生SQL生成数据库Limit语句。
*
* @param query 原生SQL语句。
* @param offset 起始偏移数。
* @param limit 限制条目数。
*
* @return 转换后的Limit语句。
*/
public abstract String getLimitString(String query, int offset, int limit);
/**
* 依据原生SQL生成数据库Count语句。
*
* @param query 原生SQL语句。
* @param countLimit count限制条目数。
*
* @return 转换后的Count语句。
*/
public String getCountString(String query, int countLimit) {
if (hasLimit(countLimit)) {
query = getLimitString(query, 0, countLimit);
}
return getSimpleCountLimitSQL(query);
}
/**
* 判断是否限制条目数。
*
* @param limit 限制条目数。
*
* @return 限制数大于0且不为最大{@code Integer.MAX_VALUE}值。
*/
protected boolean hasLimit(int limit) {
return limit > 0 && limit != Integer.MAX_VALUE;
}
}