Spring Data JPA动态查询
程序员文章站
2022-04-25 16:30:05
...
默认的 JPA 可以做简单的查询,当我们遇到多条件时怎么动态的来查询数据,这里使用 Specification 来解决这个问题
一、使用
Dao 接口需要继承 JpaRepository 之外,还需要继承 JpaSpecificationExecutor
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import com.ustcinfo.thinkcloud.common.entity.rbac.User;
public interface UserRepo extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
}
实现多条件的查询:
import java.util.ArrayList;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import com.ustcinfo.thinkcloud.common.entity.rbac.User;
import com.ustcinfo.thinkcloud.common.repository.rbac.UserRepo;
@Service
public class UserService {
@Autowired
private UserRepo userRepo;
/**
* JPA动态查询
*/
public List<User> find(User user) {
// Specification查询构造器
Specification<User> specification = new Specification<User>() {
private static final long serialVersionUID = 1L;
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
// 添加搜索条件
if (null != user.getId()) {
predicates.add(criteriaBuilder.equal(root.get("id"), user.getId())); // id是表字段
}
if (StringUtils.isNotBlank(user.getName())) {
predicates.add(criteriaBuilder.like(root.get("name"), user.getName()));
}
// 把搜索条件连接(AND)起来
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return userRepo.findAll(specification);
}
}
上一篇: easyUI中冻结表头
下一篇: ssm中xml介绍
推荐阅读
-
Spring Data JPA实践与学习
-
荐 一篇文章带你快速入门 Spring Data JPA
-
Spring Data Jpa 中级联操作CascadeType的含义
-
Spring Data Solr 查询方法
-
Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例
-
springboot使用spring-data-jpa操作MySQL数据库
-
Spring Data JPA 实现多表关联查询的示例代码
-
SpringBoot Data JPA 关联表查询的方法
-
Spring Data JPA+kkpager实现分页功能实例
-
EasyUi+Spring Data 实现按条件分页查询的实例代码