千家信息网

Mybatis重置Criteria的正确姿势是怎么样的

发表于:2024-10-16 作者:千家信息网编辑
千家信息网最后更新 2024年10月16日,这期内容当中小编将会给大家带来有关Mybatis重置Criteria的正确姿势是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mybatis重置Criter
千家信息网最后更新 2024年10月16日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 oredCriteria

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

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

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

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

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

两种方法:

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

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

public List getOredCriteria() {        return oredCriteria;    }

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

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

得出一个结论

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

Mybatis的Criteria用法总结

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

上述就是小编为大家分享的Mybatis重置Criteria的正确姿势是怎么样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0