使用:
PageHelper.startPage(reqVo.getPageIndex(), reqVo.getPageSize()); PageHelper.orderBy(" id desc");
我的sql:
<if test="distributeWarnType == 10"> AND t.expected_distribute_date <![CDATA[ <= ]]> date_add(t.release_date, interval #{period,jdbcType=INTEGER} day) </if>
异常:
net.sf.jsqlparser.parser.ParseException: Encountered " <S_IDENTIFIER> "t "" at line 32, column 65.
Was expecting one of:
"+" ...
"+" ...
"+" ...
"+" ...
"+" ...
"+" ...
"+" ...
at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:16395)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:16248)
at net.sf.jsqlparser.parser.CCJSqlParser.RegularCondition(CCJSqlParser.java:5057)
at net.sf.jsqlparser.parser.CCJSqlParser.Condition(CCJSqlParser.java:4752)
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:4713)
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:4651)
at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:4622)
原因:
1.java代码:
确定是由于【PageHelper.orderBy(params.get("orderBy").toString());】这段代码引起的
- @Override
- public List<Clerk> findClerkList(Map<String, Object> params) {
- PageHelper.startPage(((Integer) params.get("pageNum")),
- ((Integer) params.get("pageSize")));
- if (params.containsKey("orderBy")) {
- if (!StringUtil.empty(params.get("orderBy").toString())) {
- PageHelper.orderBy(params.get("orderBy").toString());
- }
- }
- List<Clerk> clerkList = clerkMapper.findClerkList(params);
- for (Clerk c : clerkList){
- String sellerStartLevel = StartLevelEnum.getEnumValueByKey(c.getSellerStartLevel());
- c.setSellerStartLevel(sellerStartLevel);
- }
- return clerkList;
- }
完整异常如下:
由【net.sf.jsqlparser.JSQLParserException】可看出是因为组装的sql语句解析过程中抛出"非RuntimeException异常",异常被程序捕抓处理且未出现新异常,异常后的代码继续执行,所以不影响一个完整Retrieve操作。而一些"RuntimeException异常",例如:空指针(NullPointerException)、数组越界(IndexOutOfBoundsException)、类型转换(ClassCastException)等会被JVM自动处理,会在console控制台捕抓并打印异常日志。
解决方案:
将 排序 写死到sql中,不要使用
PageHelper.orderBy(" id desc");
sql:
<if test="arriveWarnType == 50"> <![CDATA[ AND t.actual_arrive_date > t.contract_end_date ]]> </if> order by id desc