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 动态参数及#{}和${}的区别

关于sql中动态 ORDER BY+CASE WHEN中排序字段类型的问题

MyBatisMyBatis Order By 字段动态动态排序