1. 程式人生 > >黑馬十次方專案day02-02之springdatajpa條件查詢

黑馬十次方專案day02-02之springdatajpa條件查詢

文章目錄

根據條件查詢標籤的名稱和狀態

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

響應的資料如下

與資料庫中的值相對應.說明寫程式碼是準確的.