使用mybatis按照如下方式:
order by #{sort} #{order}
会有以下错误
[WARN ] [2018-11-19 14:51:45.687] com.alibaba.druid.sql.SQLUtils - format error com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'rder by ? ?
', expect QUES, actual QUES pos 286, line 13, column 26, token QUES
请问SQLUtils是不是不支持这种连续参数的写法?
原提问者GitHub用户meidea
的,SQLUtils 不支持这种连续参数的写法。在 MyBatis 中,使用 #{sort} 和 #{order} 表示两个不同的参数,但它们之间不能有空格。如果您需要按照指定的排序方式进行查询,可以使用以下两种方法:
方法 1:使用独立的标签
select * from table_name
where #{sort} = 'asc' or #{sort} = 'desc'
and #{order} = 'id' or #{order} = 'name'
CopyCopyCopy
在 Mapper.xml 中使用独立的标签:
CopyCopyCopy
方法 2:使用嵌套的标签
select * from table_name
where #{sort} = 'asc' or #{sort} = 'desc'
and ( #{order} = 'id' or #{order} = 'name' )
CopyCopyCopy
在 Mapper.xml 中使用嵌套的标签:
CopyCopyCopy
这两种方法都可以解决您的问题,您可以根据实际情况选择合适的方法。
这样似乎没问题。
public static void main(String[] args) {
String sql2 = "(SELECT id\n" +
" FROM test_person\n" +
" WHERE id >= (SELECT MAX(id) FROM test_person2))\n" +
" UNION ALL\n" +
" SELECT id\n" +
" FROM time_test order by ? ?;";
System.out.println(SQLUtils.format(sql2, "mysql"));
}
输出:
(SELECT id FROM test_person WHERE id >= (SELECT MAX(id) FROM test_person2)) UNION ALL SELECT id FROM time_test order by ? ?;
原回答者GitHub用户ddzhj
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。