一、查詢不顯示全部列——select的使用
第一種情況——直接選定要顯示的列
// SELECT id,name FROM user WHERE (name LIKE ? AND age < ?)
@Test
public void selectByWrapperSupper(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id","name").like("name","J").lt("age",20);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
第二種情況——反向設(shè)定不要顯示的列(適用于要顯示的列有很多的情況)
// SELECT id,email FROM user WHERE (name LIKE ? AND age < ?)
@Test
public void selectByWrapperSupper2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","J").lt("age",20).select(User.class,
info->!info.getColumn().equals("age")&&!info.getColumn().equals("name"));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
二、方法的第三個參數(shù)——condition執(zhí)行條件的使用
// SELECT id,name,age,email FROM user WHERE (name LIKE ?)
@Test
public void testCondition(){
String name = "J";
String email = "";
condition(name, email);
}
private void condition(String name,String email){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// if(StringUtils.isNotBlank(name)){
// queryWrapper.like("name", name);
// }
// if(StringUtils.isNotBlank(email)){
// queryWrapper.like("email", email);
// }
// 使用第三個參數(shù)condition參數(shù)來控制條件后
queryWrapper.like(StringUtils.isNotBlank(name),"name",name)
.like(StringUtils.isNotBlank(email), "email", email);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
三、當(dāng)使用實體作為條件構(gòu)造器的構(gòu)造參數(shù)時
注1:實體作為構(gòu)造參數(shù)和條件構(gòu)造器單獨(dú)設(shè)置的條件同時存在,所以注意不要設(shè)置重復(fù)了。
// SELECT id,name,age,email FROM user WHERE name=? AND age=? AND (name LIKE ? AND age < ?)
@Test
public void selectByWrapperEntity(){
User user = new User();
user.setName("Jack");
user.setAge(20);
QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
queryWrapper.like("name","J").lt("age",20);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
注2:實體作為構(gòu)造參數(shù)傳入后如果想做模糊查詢,只需要在實體上對應(yīng)字段添加注解
@TableField(condition = SqlCondition.LIKE)
private String name;
注3:%s表示字段,#{%s}表示字段對應(yīng)的值,自定義一個條件
// SELECT id,name,age,email FROM user WHERE name LIKE CONCAT('%',?,'%') AND age<? AND (name LIKE ? AND age < ?)
@TableField(condition = "%s<#{%s}")
private int age;
四、allEq用法
第一種情況:某個條件的值為null時,查出來的sql就是is null
// SELECT id,name,age,email FROM user WHERE (name = ? AND age IS NULL)
@Test
public void selectByWrapperAllEq(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String,Object> params = new HashMap<>();
params.put("name","Jack");
params.put("age",null);
queryWrapper.allEq(params);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
第二種情況:某個條件的值為null,allEq方法添加第二個參數(shù)為false時,查出來的sql忽略值為null的條件
// SELECT id,name,age,email FROM user WHERE (name = ?)
@Test
public void selectByWrapperAllEq(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String,Object> params = new HashMap<>();
params.put("name","Jack");
params.put("age",null);
queryWrapper.allEq(params,false);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
第三種情況:allEq方法中添加過濾條件參數(shù),只保留符合條件的參數(shù)作為條件
// SELECT id,name,age,email FROM user WHERE (age IS NULL)
@Test
public void selectByWrapperAllEq2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String,Object> params = new HashMap<>();
params.put("name","Jack");
params.put("age",null);
queryWrapper.allEq((k,v)->!k.equals("name"),params);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
第四種情況:在上面第三種情況基礎(chǔ)上再添加第三個布爾條件為false,忽略值為null的條件
// SELECT id,name,age,email FROM user
@Test
public void selectByWrapperAllEq2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String,Object> params = new HashMap<>();
params.put("name","Jack");
params.put("age",null);
queryWrapper.allEq((k,v)->!k.equals("name"),params,false);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
第五種情況:在上面基礎(chǔ)上添加condition執(zhí)行條件
// SELECT id,name,age,email FROM user WHERE (name = ?)
@Test
public void selectByWrapperAllEq2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String,Object> params = new HashMap<>();
params.put("name","Jack");
params.put("age",null);
queryWrapper.allEq(StringUtils.isNotBlank((String)params.get("name")),(k,v)->!k.equals("age"),params,false);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}