MyBatis Example And与Or混合使用的实例

 更新时间:2021年12月23日 14:37:35   作者:看!蜗牛在漂移  
这篇文章主要介绍了MyBatis Example And与Or混合使用的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MyBatis Example And与Or混合使用

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

      MemberExample example = new MemberExample();
      MemberExample.Criteria c1 = example.createCriteria();
                          c1.andOne(A).andTwo(B);
      
      MemberExample.Criteria c2 = example.createCriteria();
                          c2.andThree(C).andFour(D); 
      example.or(c2);  

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

思路 : 分拆 : A and ( B or C ) ==> ( A and B ) or ( A and C )

   MemberExample example = new MemberExample();
      MemberExample.Criteria c1 = example.createCriteria();
                          c1.andOne(A).andTwo(B);
      
      MemberExample.Criteria c2 = example.createCriteria();
                          c2.andOne(A).andThree(C); 
      example.or(c2);   

MyBatis Example 处理And、Or关系方法

1.( xx and xx) or ( xx and xx)

实例代码:

BaUserExample baUserExample = new BaUserExample(); 
Criteria criteria1 = baUserExample.createCriteria();
criteria1.andOrgIdEqualTo("1");
criteria1.andDeptIdEqualTo("1");
   
Criteria criteria2 = baUserExample.createCriteria();
criteria2.andUserNameEqualTo("name");
criteria2.andEmailLike("%test@%");
   
baUserExample.or(criteria2); 
userMapper.countByExample(baUserExample);

执行的sql语句:

==>  Preparing: select count(*) from ba_user WHERE ( org_id = ? and dept_id = ? ) or( user_name = ? and email like ? )

2.xx and ( xx or xx)

暂时没找到直接的sql语句构造方法,但是经过转换还是可以实现的

根据逻辑表达式可以知道 a and ( b or c ) = ( a and b) or ( a and c )

所以就转变成第一种方法

举个例子,假如想要实现

select count(*) from ba_user WHERE userName like ? and ( dept_id is null or dept_id <>? )

可以转化为

select count(*) from ba_user WHERE (userName like ? and  dept_id is null ) or ( userName like ? and  dept_id <>? )

实例代码:

BaUserExample baUserExample = new BaUserExample(); 
Criteria criteria1 = baUserExample.createCriteria();
criteria1.andUserNameLike("%name%");
criteria1.andDeptIdIsNull();
   
Criteria criteria2 = baUserExample.createCriteria();
criteria2.andUserNameLike("%name%");
criteria2.andDeptIdNotEqualTo("1");
   
baUserExample.or(criteria2); 
userMapper.countByExample(baUserExample);

执行的sql语句:

==>  Preparing: select count(*) from ba_user WHERE ( user_name like ? and dept_id is null ) or( user_name like ? and dept_id <> ? ) 

这算是一种取巧的方法吧,对于这样的问题可以自己编写mapper.xml文件,或者在代码里面过滤,还有一种思路就是修改Criteria的代码实现and和or功能调换(还没尝试过)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 中DateUtils日期工具类的实例详解

    Java 中DateUtils日期工具类的实例详解

    这篇文章主要介绍了Java 中DateUtils日期工具类的实例详解的相关资料,有时候开发java项目使用日期类型,这里介绍下日期工具类,需要的朋友可以参考下
    2017-08-08
  • Spring整合Mybatis使用<context:property-placeholder>时的坑

    Spring整合Mybatis使用<context:property-placeholder>时的坑

    这篇文章主要介绍了Spring整合Mybatis使用<context:property-placeholder>时的坑 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Java 实战范例之精美网上音乐平台的实现

    Java 实战范例之精美网上音乐平台的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+vue+Springboot+ssm+mysql+maven+redis实现一个前后端分离的精美网上音乐平台,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java实现链表数据结构的方法

    Java实现链表数据结构的方法

    这篇文章主要介绍了Java实现链表数据结构的相关资料,每一个链表都包含多个节点,节点又包含两个部分,一个是数据域(储存节点含有的信息),一个是引用域(储存下一个节点或者上一个节点的地址),需要的朋友可以参考下
    2022-01-01
  • Java数据类型的规则

    Java数据类型的规则

    这篇文章主要介绍了Java数据类型的规则的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Maven Repository 使用方法

    Maven Repository 使用方法

    对于Java开发者来说,Maven Repository是个必须掌握的网站,它可以让开发者更加方便地管理和维护 Java 项目的依赖项,同时简化了项目开发的过程,这篇文章主要介绍了Maven Repository 使用方法,需要的朋友可以参考下
    2024-02-02
  • IDEA使用SequenceDiagram插件绘制时序图的方法

    IDEA使用SequenceDiagram插件绘制时序图的方法

    这篇文章主要介绍了IDEA使用SequenceDiagram插件绘制时序图的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 利用java、js或mysql计算高德地图中两坐标之间的距离

    利用java、js或mysql计算高德地图中两坐标之间的距离

    最近因为工作的需求,需要计算出高德地图中两个坐标的距离,通过查找相关资料发现了多种实现的方法,下面这篇文章主要给大家介绍了关于利用java、js或mysql计算高德地图中两坐标之间距离的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-10-10
  • Java中Set与List的关系与区别介绍

    Java中Set与List的关系与区别介绍

    这篇文章主要介绍了Java中Set与List的关系与区别介绍,本文总结它们两个接口都是继承自Collection、它们之间的存储方式不一样,需要的朋友可以参考下
    2015-03-03
  • 教你Java中的Lock锁底层AQS到底是如何实现的

    教你Java中的Lock锁底层AQS到底是如何实现的

    本文是基于ReentrantLock来讲解,ReentrantLock加锁只是对AQS的api的调用,底层的锁的状态(state)和其他线程等待(Node双向链表)的过程其实是由AQS来维护的,对Java Lock锁AQS实现过程感兴趣的朋友一起看看吧
    2022-05-05

最新评论