Spring-Data-JPA 中的查询如何动态组装条件?

纯天然原味酱 发布于 2012/08/10 10:49
阅读 32K+
收藏 1

看了一下,SpringSide 中 Spring-Data-JPA 的示例都是简单的查询。

现在有个简单的场景:页面有一个“用户名”查询框和一个查询按钮。点击查询按钮,动态组装的sql无非就是下面两条:

select * from user
select * from user where username like '%term%'

用 Spring-Data-JPA 应该怎么做呢?看到的都是用 Specifications 的简单例子。http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/#specifications

 

加载中
1
纯天然原味酱
纯天然原味酱
接口:Page<T> findAll(Specification<T> spec, Pageable pageable);

Page<User> findAll(name,age,pn,ps){
  dao.findAll(Specifications.where(getWhereClause(name,age)),
  new PageRequest(pn-1,ps));
}

private Specification<User> getWhereClause(name,age) {
  return new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> r, CriteriaQuery<?> q, CriteriaBuilder cb) {
    Predicate predicate = cb.conjunction();
       if (StringUtils.isNotBlank(name)) {
         predicate.getExpressions().add(
           cb.like(r.<String>get("name"), "%" + StringUtils.trim(name) + "%")
         );
       }
       ...
       return predicate;
    }
  };
}

 

南北桥
南北桥
我想知道查询条件的DTO怎么组装?
xianwu13
xianwu13
这是查询一张表,如果是两张表关联,jpa会提供动态sql的功能吗?谢谢
1
laumtt
laumtt
但是参数是动态的哦,就是说查询的时候很多条件,有得时候只选择一个条件,有得时候选择多个条件,怎么办呢
laumtt
laumtt
回复 @纯天然原味酱 : 动态分组怎么实现呢,哥们
纯天然原味酱
纯天然原味酱
简单的做法,参数都写全了,不为空的条件就组装进去。 上面举的例子,条件是name和age,name如果isnotblank才组装like条件
1
何胜超
何胜超

引用来自“纯天然原味酱”的评论

接口:Page<T> findAll(Specification<T> spec, Pageable pageable);

Page<User> findAll(name,age,pn,ps){
  dao.findAll(Specifications.where(getWhereClause(name,age)),
  new PageRequest(pn-1,ps));
}

private Specification<User> getWhereClause(name,age) {
  return new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> r, CriteriaQuery<?> q, CriteriaBuilder cb) {
    Predicate predicate = cb.conjunction();
       if (StringUtils.isNotBlank(name)) {
         predicate.getExpressions().add(
           cb.like(r.<String>get("name"), "%" + StringUtils.trim(name) + "%")
         );
       }
       ...
       return predicate;
    }
  };
}

 

感谢,解决我的大问题
0
2
285051173
顶一下,网上都找不到
0
天天天
天天天
我已经实现了
0
江南白衣
江南白衣
在最新snapshot里已经实现了,也是用Specifications的
0
laumtt
laumtt

这个怎么把参数传进去呢,我看了下,好像没实现呢,江南大哥

0
laumtt
laumtt
具体怎么用呢,能给段代码吗
0
laumtt
laumtt
OK,谢谢
0
laumtt
laumtt
spring data jpa 如何做分组统计查询呢
返回顶部
顶部