mybatis动态order by 排序问题 2021-09-17
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis动态order by 排序问题 2021-09-17相关的知识,希望对你有一定的参考价值。
参考技术A sql查询需要根据条件动态修改排序字段以及升降序;刚开始尝试在sql中直接使用choose when进行判断:
此方式执行时,始终进不了判断。
使用 order by orderType进行判断,在传递查询条件的时候,将需要排序的字段注入
执行后sql为 order by A_DATE desc 或 order by B_DATE asc。
如此便解决问题。
Mybatis使用Criteria标准查询数据库没有order by排序方法时,使用Java的Collections.sort()进行排序
Mybatis使用Criteria标准查询数据库使用Java进行排序
.笔者在移植老版本项目代码过程中遇到将下列SQL换成用Criteria标准查询。原xml是这样写的
select
`paper_id` as paperId,
`serial_num` as serialNum,
`question` as question,
`items` as items
from eval_question eq
where eq.paper_id = #paperId
and eq.del_flag = 0
order by serial_num asc
发现老大新搭建的项目是用模板生成的Mapper没有排序方法
|
|
|
要不改xml吧,但是老大这么说。。。
|
|
|
好麻烦啊啊啊啊啊,不行,咱就自己用Java进行排序吧,之前有看到对list中的对象实现Comparable接口进行排序,但还是觉得麻烦,咱们来个更优雅的写法。贴上方法全部代码
private List<EvalQuestion> getQuestionsByPaperId(Long paperId)
//创建查询标准条件
EvalQuestionCriteria evalQuestionCriteria = new EvalQuestionCriteria();
evalQuestionCriteria.createCriteria()
//相当于SQL:where eq.paper_id = #paperId
.andPaperIdEqualTo(paperId)
//相当于SQL加上 and eq.del_flag = 0
.andDelFlagEqualTo(0);
//查询数据库列表
List<EvalQuestion> evalQuestions = evalAppQuestionMapper.selectByExample(evalQuestionCriteria);
//使用Collections.sort()进行排序,不必将对象实现Comparable接口而进行排序;相当于SQL:order by serial_num asc
Collections.sort(evalQuestions,new Comparator<EvalQuestion>()
//重写compare方法
public int compare(EvalQuestion arg0, EvalQuestion arg1)
//按SerialNum排序
return arg0.getSerialNum().compareTo(arg1.getSerialNum());
);
//返回排序完毕的列表
return evalQuestions;
优雅就完事了
以上是关于mybatis动态order by 排序问题 2021-09-17的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis order by 动态传参出现的一个小bug
Mybatis使用Criteria标准查询数据库没有order by排序方法时,使用Java的Collections.sort()进行排序
Mybatis使用Criteria标准查询数据库没有order by排序方法时,使用Java的Collections.sort()进行排序
数据库框架mybatis使用order by 动态参数及#{}和${}的区别