文章目录
根据条件查询标签的名称和状态
Controller层
- 根据条件查询标签的名称和状态
- Controller层
- Service层
- 使用Api工具进行测试
在LabelController中写如下的方法
/**
* 方法名: findSearch
* 方法描述: 条件分页查询
* 修改日期: 2019/1/7 19:46
* @param label
* @return entity.Result
* @author taohongchao
* @throws
*/
@RequestMapping(value = "/search",method = RequestMethod.POST)
public Result findSearch(@RequestBody Label label) {
List list= labelService.findSearch(label);
return new Result(true, StatusCode.OK, "查询成功", list);
}
Service层
/**
* 方法名: findSearch
* 方法描述: 分页查询标签的数据
* 修改日期: 2019/1/7 18:49
* @param label
* @return java.util.List
* @author taohongchao
* @throws
*/
public List findSearch(Label label) {
return labelDao.findAll(new Specification() {
/**
* 方法名: toPredicate
* 方法描述: jpa的条件查询
* 修改日期: 2019/1/7 19:20
* @param root 根对象,要把条件封装到哪个对象中
* @param query 封装查询的关键字. 比如group by order by
* @param cb 封装条件对象 如果直接返回null,表示不封装任何的条件
* @return javax.persistence.criteria.Predicate
* @author taohongchao
* @throws
*/
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
//存放一个集合, 用于存储所有的条件
ArrayList list = new ArrayList();
if (label.getLabelname() != null && !"".equals(label.getLabelname())) {
// 根据标签的名称,模糊查询
Predicate predicate = cb.like(root.get("labelname").as(String.class), "%" + label.getLabelname() + "%");
list.add(predicate);
}
if (label.getState() != null && !"".equals(label.getState())) {
//等值查询标签的状态
Predicate predicate = cb.equal(root.get("state").as(String.class), label.getState());
list.add(predicate);
}
//创建一个数组, 作为最终的返回值的条件
Predicate[] parr = new Predicate[list.size()];
//把list转为数组
list.toArray(parr);
//返回所有的条件
return cb.and(parr);
}
});
}
使用Api工具进行测试
写完上面的代码, 启动工程,进行测试 在api中,选择对应的接口. 填写的请求参数如下
{
"labelname": "g",
"state": "1"
}
注意底下的参数的格式为application/json
响应的数据如下 与数据库中的值相对应.说明写代码是准确的.