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

693 阅读1分钟

转载自:www.cnblogs.com/FengLog/p/8…

近期的一个项目中遇到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);`

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