个人理解:
where if就相当于正常的java中的if 语句,如果有多个条件组合判断的话用 and, or连接
而where choose when otherwise
choose就好像是switch,when相当于case,可以有一种属性的对个判断,但不能同时去判断多个属性. 同时,只要有一个when满足,则break
otherwise就好像是default,如果前面的when都不满足,则进入otherwise
1.动态sql where if
传递参数为实体类user,if内的userName是user的属性 username=#{userName} 中的username是数据库表中的字段, #{userName}是实体类user中的.
select * from user
username=#{userName}
and gender=#{gender}
@Test
public void testFindByCondition() throws Exception{
User user=new User();
user.setUserName("xxx");
user.setGender("男");
List list = userDao.findByCondition(user);
for (User user1:list)
{
System.out.println(user1);
}
}
2.同时,if中可以由多个条件的拼接,如这里的ids !=null and ids.size()>0 或者是ids !=null and user!=null 这样的多个条件的拼接.
select * from user
#{uid}
@Test
public void testFindByIds() throws Exception{
Vo vo=new Vo();
List list=new ArrayList<>();
list.add(2);
list.add(5);
list.add(7);
vo.setIds(list);
List users = userDao.findByIds(vo);
for (User user:users)
{
System.out.println(user);
}
}
3.但是如果是where choose when otherwise 的时候,切记不能使用不同属性条件的拼接,如 a1 and b2 这样是不可以的, 但是可以 a!=null and a==1 这样,对同一个属性进行不同的判断
select * from user
age=22
age=23
@Test
public void testFindByChoose() throws Exception{
User user=new User();
user.setUserName("aaa");
user.setGender("男");
user.setAge(22);
List users= userDao.findByChoose(user);
for (User user1:users){
System.out.println(user1);
}
}