欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Mybatis重置Criteria的正确姿势分享,

来源: javaer 分享于  点击 42878 次 点评:252

Mybatis重置Criteria的正确姿势分享,


目录
  • Mybatis重置Criteria
    • 发现问题原因如下
    • 我们想重置查询条件怎么办?
    • 得出一个结论
  • Mybatis的Criteria用法总结

    Mybatis重置Criteria

    开发中遇到Mybatis生成的Example通过调用createCriteria()来创建Criteria并设置查询条件的情况。

    但是需要换一个查询条件再次查询时发现再次调用该方法“无效果"。

    看到大多数的做法是通过new一个新的Example来查询,考虑到可能不是最好的或者最合理的做法,对此进行了简单研究。

    发现问题原因如下

    我们看下生成的Exmaple的源码:

     public Criteria createCriteria() {
            Criteria criteria = createCriteriaInternal();
            if (oredCriteria.size() == 0) {
                oredCriteria.add(criteria);
            }
            return criteria;
        }
     
        protected Criteria createCriteriaInternal() {
            Criteria criteria = new Criteria();
            return criteria;
        }
    

    发现调用createCriteria(),虽然每次创建一个新的Criteria对象但是只有

    protected List<Criteria> oredCriteria

    这个列表长度为0时才会添加,进去。

    查看映射的xml文件时发现,查询条件正是取自于oredCriteria。

    只有调用or时才添加到该集合中

     public void or(Criteria criteria) {
            oredCriteria.add(criteria);
        }

    我们想重置查询条件怎么办?

    两种方法:

    一种是只清空Example的oredCriteria属性。

    那么可以通过Example类中的getOredCriteria() 函数获取该列表后通过clear方法清空。

    public List<Criteria> getOredCriteria() {
            return oredCriteria;
        }

    另外一种更彻底的方法,直接调用Example的clear() 方法,将exmple对象“重置”为初始状态。

      public void clear() {
            oredCriteria.clear();
            orderByClause = null;
            distinct = false;
            pageParam = null;
        }
     

    得出一个结论

    遇到问题,多看源码,多看官方文档。

    Mybatis的Criteria用法总结

    在这里插入图片描述

    用一对多内敛查询的时候,有的老铁提出left join in 但是我和同事商讨结果是用代码写处各种list然后stream存到数据库中,这样一来把计算压力从数据库存入服务器,当并发量高了,这样做的好处就体现在性能方面了。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • Mybatis Criteria使用and和or进行联合条件查询的操作方法
    • Mybatis中的Criteria条件查询方式
    • mybatis createcriteria和or的区别说明
    相关栏目:

    用户点评