您当前的位置: 首页 >  spring

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

java持续实践 发布时间:2019-01-07 19:52:53 ,浏览量:2

文章目录
    • 根据条件查询标签的名称和状态
      • Controller层
      • Service层
      • 使用Api工具进行测试

根据条件查询标签的名称和状态 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 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

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

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0878s