mybatis createcriteria和or的区别说明

作者:QQ_851228082 时间:2021-09-27 09:20:40 

createcriteria和or的区别

mybatis generator插件生成的example中,有createcriteria和or方法,他们有什么区别呢?

通过源码,能很清楚的看出差别

createcriteria,当没有规则时,则加入到现有规则,但有规则时,不再加入到现有规则,只是返回创建的规则


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

or,创建的规则,加入到规则集中,并且是or的关系


public Criteria or() {
   Criteria criteria = createCriteriaInternal();
   oredCriteria.add(criteria);
   return criteria;
}

mybatis中Example的and和or

能用Example代码解决的,我都不会去写个SQL放在项目里。我希望让代码尽量优雅、易读,所以这里记录一下关于MyBatis中Example的and和or的使用,主要是如下两种场景:

  • where (条件1 and 条件2) or (条件3 and 条件4)

  • where (条件1 and 条件2) and (条件3 or 条件4)

where (条件1 and 条件2) or (条件3 and 条件4)


//条件1 and 条件2
example.createCriteria()
       .andEqualTo("isDeleted",IsDeleted.NOT_DELETED)
       .andEqualTo("name", projectCatalogEntity.getName());
//or (条件3 and 条件4)
example.or(example.createCriteria()
       .andEqualTo("isDeleted",IsDeleted.NOT_DELETED)
       .andEqualTo("code", projectCatalogEntity.getCode()));

WHERE ( is_deleted = ? and name = ? ) or ( is_deleted = ? and code = ? )

where (条件1 and 条件2) and (条件3 or 条件4)


//条件1 and 条件2
example.createCriteria()
       .andEqualTo("isDeleted",IsDeleted.NOT_DELETED))
       .andEqualTo("parentId", projectCatalogEntity.getParentId());
//and (条件3 or 条件4)
example.and(example.createCriteria()
       .andEqualTo("name", projectCatalogEntity.getName())
       .orEqualTo("code", projectCatalogEntity.getCode()));

WHERE ( is_deleted = ? and parent_id = ? ) and ( name = ? or code = ? )

来源:https://blog.csdn.net/wangjun5159/article/details/53325540

标签:mybatis,createcriteria,or
0
投稿

猜你喜欢

  • JAVA读取属性文件的几种方法总结

    2023-10-21 04:36:40
  • Java使用Thread和Runnable的线程实现方法比较

    2021-11-17 07:52:54
  • C++中求余运算符(%)示例详解

    2023-11-02 14:20:39
  • C#中添加窗口的步骤详解

    2021-12-19 16:30:29
  • maven <repositories>标签和<pluginRepositories>标签的使用

    2022-09-26 01:06:33
  • 最常用的1000个Java类(附代码示例)

    2023-03-25 20:29:07
  • Java通过匿名类来实现回调函数实例总结

    2023-06-26 12:30:42
  • java线程间通信的通俗解释及代码示例

    2023-12-06 18:04:43
  • C#中方法的详细介绍

    2023-08-06 12:31:21
  • Apache SkyWalking 修复TTL timer 失效bug详解

    2023-08-18 08:09:53
  • 详解C#中三个关键字params,Ref,out

    2021-09-25 18:54:02
  • c# 基于wpf,开发OFD电子文档阅读器

    2023-09-08 00:10:02
  • Spring JPA之find拓展方法示例详解

    2021-12-11 03:50:49
  • JavaEE7+Websockets+GlassFish4打造聊天室

    2023-11-29 01:01:39
  • Java序列化和反序列化示例介绍

    2023-11-25 04:24:26
  • Java应用程序开发学习之static关键字应用

    2021-12-20 13:23:41
  • SpringBoot处理接口幂等性的两种方法详解

    2021-12-23 10:32:32
  • Mybatis Interceptor 拦截器的实现

    2022-11-02 05:05:44
  • JAVA JDK8 List分组的实现和用法

    2023-11-26 09:56:11
  • Android编程之DatePicker和TimePicke简单时间监听用法分析

    2022-07-04 00:42:24
  • asp之家 软件编程 m.aspxhome.com