黑馬十次方專案day02-02之springdatajpa條件查詢
阿新 • • 發佈:2019-01-13
文章目錄
根據條件查詢標籤的名稱和狀態
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
響應的資料如下
與資料庫中的值相對應.說明寫程式碼是準確的.