黑马十次方项目day02-02之springdatajpa条件查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33229669/article/details/86022808

根据条件查询标签的名称和状态

Controller层

在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<Label> list=  labelService.findSearch(label);
        return new Result(true, StatusCode.OK, "查询成功", list);
    }

Service层


 /**
     * 方法名: findSearch
     * 方法描述: 分页查询标签的数据
     * 修改日期: 2019/1/7 18:49
      * @param label
     * @return java.util.List<com.tensquare.base.pojo.Label>
     * @author taohongchao
     * @throws
     */
    public List<Label> findSearch(Label label) {
        return labelDao.findAll(new Specification<Label>() {
            /**
             * 方法名: 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<Label> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                //存放一个集合, 用于存储所有的条件
                ArrayList<Predicate> 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

响应的数据如下

与数据库中的值相对应.说明写代码是准确的.

猜你喜欢

转载自blog.csdn.net/qq_33229669/article/details/86022808