关于Mybatis的Example(and ,or )应用

近期的一个项目中遇到 Mybatis 的 Example 的 and or 的应用,感觉有必要记录一下(个人见解,有问题请指出。谢谢)

 

1. 在 Example 中的每一个 Criteria 相当于一个括号,把里面的内容当成一个整体

where  (Userid = "11" and pointname = "22")

1
2
3
BasePointsExample.Criteria criteria1 = example.createCriteria();
criteria1.andUseridEqualTo("11");
criteria1.andPointnameLike("22");

2. 在 Criteria 中没有直接的 or 的构造方法(至少我不知道)所以碰到一下 where  后  and or 的连用的话会有点麻烦

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

1
2
3
4
5
6
7
8
BasePointsExample.Criteria criteria1 = example.createCriteria();
           criteria1.andUseridEqualTo('11');
           criteria1.andPointnameLike(StringUtil.concatlike('22'));
 
 BasePointsExample.Criteria criteria2 = example.createCriteria();
           criteria2.andUsernameEqualTo('33');
           criteria2.andPointcontentLike(StringUtil.concatlike('44'));
 example.or(criteria2);

  2.2   where 条件 1 and (条件 2   or   条件 3)   这是我碰到的问题,在网上看到一种拆分的方法感觉很好

               A    and  (B  or   C )   ==>  (A  and  B)  or  (A  and C)

   

1
2
3
4
5
6
7
8
BasePointsExample.Criteria criteria1 = example.createCriteria();
           criteria1.andUseridEqualTo('11');
           criteria1.andPointnameLike(StringUtil.concatlike('22'));
 
           BasePointsExample.Criteria criteria2 = example.createCriteria();
           criteria2.andUseridEqualTo('11');
           criteria2.andPointcontentLike(StringUtil.concatlike('33'));
           example.or(criteria2);

  

这是我在项目中遇到的,正好能解决我的问题。感觉还有更好的方法,正在查找尝试,这种方法简单的还可以,复杂的就吃力了。