package jef.database.dialect.handler; import jef.database.jdbc.statement.UnionJudgement; import jef.database.jdbc.statement.UnionJudgementDruidMySQLImpl; import jef.database.wrapper.clause.BindSql; import jef.tools.StringUtils; public class MySqlLimitHandler implements LimitHandler { private final static String MYSQL_PAGE = " limit %start%,%next%"; private UnionJudgement unionJudge; public MySqlLimitHandler() { if(UnionJudgement.isDruid()){ unionJudge=new UnionJudgementDruidMySQLImpl(); }else{ unionJudge=UnionJudgement.DEFAULT; } } public BindSql toPageSQL(String sql, int[] range) { return toPageSQL(sql, range,unionJudge.isUnion(sql)); } @Override public BindSql toPageSQL(String sql, int[] range, boolean isUnion) { String[] s = new String[] { Integer.toString(range[0]), Integer.toString(range[1]) }; String limit = StringUtils.replaceEach(MYSQL_PAGE, new String[] { "%start%", "%next%" }, s); return new BindSql(isUnion ? StringUtils.concat("select * from (", sql, ") tb__", limit) : sql.concat(limit)); } }