Spring-data-jpa扩展之JpaSpecificationExecutor

不属于Repository体系,实现一组 JPA Criteria 查询相关的方法

image.png
Specification:封装 JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象

Repository
public interface CityRepository extends JpaRepository,CityDao,JpaSpecificationExecutor,QueryDslPredicateExecutor {

}
Service
package club.javalearn.learn.springdata.extend.service;

import club.javalearn.learn.springdata.extend.domain.City;
import org.springframework.data.domain.Page;

import java.util.List;

public interface CityService {
void test(String userName);

Page getPageList();
List getList();
List getList2();
}
Service实现类
package club.javalearn.learn.springdata.extend.service;

import club.javalearn.learn.springdata.extend.domain.City;
import club.javalearn.learn.springdata.extend.domain.QCity;
import club.javalearn.learn.springdata.extend.repository.CityRepository;
import com.querydsl.core.types.Predicate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;
import java.util.List;

@Service
public class CityServiceImpl implements CityService {
@Autowired
private CityRepository cityRepository;

public void test(String userName) {
QCity qCity = QCity.city;
Predicate predicate = qCity.name.eq(userName).and(qCity.id.gt(100));
cityRepository.findAll(predicate);
}

@Override
public List getList2() {
Pageable pageable = new PageRequest(1,10);
Page page = cityRepository.findAll(new Specification(){
@Override
public javax.persistence.criteria.Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
Path namePath = root.get(“name”);
Path countryPath = root.get(“country”);
//这里可以设置任意条查询条件
query.where(cb.like(namePath, “%李%”), cb.like(countryPath, “%武汉%”));
//这种方式使用JPA的API设置了查询条件,所以不需要再返回查询条件Predicate给Spring Data Jpa,故最后return null;即可。
return null;
}
},pageable);
return page.getContent();
}
}

Categories: Spring Data

发表评论 取消回复

placeholder.jpg

电子邮件地址不会被公开。

Name
Email
Website
What's on your mind?

近期文章
  • Maven deploy部署jar到远程私服仓库
  • java动态代理实现与原理
  • git 常用命令
  • java中观察者模式Observable和Observer
  • Netty解决TCP粘包和拆包问题的四种方案
近期评论
  • 马化腾发表在《Nginx的一些基本功能》
  • geyang发表在《世界,您好!》
  • 一位WordPress评论者发表在《世界,您好!》
分类目录
  • Big Data (5)
  • Java (27)
  • MicroServices (13)
    • GateWay (2)
    • REST (2)
  • Plus (38)
  • Spring (9)
    • Spring Boot (5)
    • Spring Data (4)
  • 中间件/框架 (5)
    • Kafka (3)
  • 数据库 (11)
    • Hbase (5)
    • MongoDb (2)
    • Mysql (3)
标签
apiDoc Drools dubbo fiddler Grafana hbase Hystrix IDEA java JDK jpa jvisualvm jvm kafka linux MongoDB MQTT Mysql Netty nginx OpenJDK Prometheus REST RocketMQ RPC Servlet Sleuth SOA spring boot spring data zookeeper Zuul 域名 微服务 数据结构 日志 爬虫 缓存 股票 设计模式 读书 运维 队列 集合 音乐
联系我

你可能感兴趣的:(Spring-data-jpa扩展之JpaSpecificationExecutor)