优秀的编程知识分享平台

网站首页 > 技术文章 正文

SpringBoot+SptingCloud Spring全家桶微服务实战项目(二)

nanyue 2024-10-01 13:05:15 技术文章 6 ℃

十次方项目之springdatajpa条件查询

文章目录

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

  • Controller层
  • Service层
  • 使用Api工具进行测试

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

Controller层

在LabelController中写如下的方法

/**
* 方法名: findSearch
* 方法描述: 条件分页查询
* @param label
* @return entity.Result
* @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
* 方法描述: 分页查询标签的数据
* @param label
* @return java.util.List<com.tensquare.base.pojo.Label>
* @throws
*/
public List<Label> findSearch(Label label) {
 return labelDao.findAll(new Specification<Label>() {
 /**
 * 方法名: toPredicate
 * 方法描述: jpa的条件查询
 * @param root 根对象,要把条件封装到哪个对象中
 * @param query 封装查询的关键字. 比如group by order by
 * @param cb 封装条件对象 如果直接返回null,表示不封装任何的条件
 * @return javax.persistence.criteria.Predicate
 * @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

响应的数据如下

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

需要项目资料的可以私聊我!

未完待续~~~

最近发表
标签列表