2024/05/04
criteria实现多条件筛选
思路:多个if
if (StringUtils.isNotEmpty(column1)) {
criteria.and字段EqualTo(column1);
}
criteria实现模糊查询
思路:首尾拼接%
if (StringUtils.isNotEmpty(name)) {
criteria.andNameLike(% + sname + %);
}
criteria实现批量查询
思路:使用and字段xxxIn
if (CollectionUtils.isNotEmpty(nameList)) {
criteria.andNameTypeIn(nameList);
}
实现
吊你卤味:把那块卤味(腊肉)吊起来
原理
创建查询的条件:
Criteria criteria = new Criteria();
criteria.createCriteria().andXX1EqualTo(XX1).andXX2EqualTo(XX2);
根据条件调用mybatis的接口:
xxxMapper.selectByExample(criteria);
例子
我需要根据姓名的List集合,查询出对应的对象List
1.创建nameList:
List<String>姓名List =
对象List.stream().map(对象::getName).collect.(Collectors.toList());
2.根据姓名List,写critedia:
Criteria criteria = new Criteria();
criteria.createCriteria().and姓名In(姓名List);
3.调用mybatis已经实现的接口,查出对象List:
Mapper.selectByExample(criteria);
其中,selectByExample方法是这样的:
List<对象> selectByExample(Criteria criteria);
到此,我们已经查询出需要的对象List了。
扩展
假设我们的对象2有名字name跟年龄age两个属性。在某个对象中,只有名字name,我们需要将
name对应的age填充上去,该怎么做。
1.先建立姓名和年龄的map
Map<String, Integer> nameAndAgeMap =
对象List.stream.collect(Collectors.toMap(对象::getName, 对象::getAge));
2.给对象2塞年龄age
for (对象2 大傻春: 对象2List) {
if (nameAndAgeMap .containsKey(大傻春.getName())) {
大傻春.setAge(nameAndAgeMap .get(大傻春.getName());
}
}