关于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); |
这是我在项目中遇到的,正好能解决我的问题。感觉还有更好的方法,正在查找尝试,这种方法简单的还可以,复杂的就吃力了。