Spring-data-jpa扩展之JpaSpecificationExecutor

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

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

Repository
public interface CityRepository extends JpaRepository<City,Integer>,CityDao,JpaSpecificationExecutor<City>,QueryDslPredicateExecutor<City> {

}
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<City> getPageList();
List<City> getList();
List<City> 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<City> getList2() {
Pageable pageable = new PageRequest(1,10);
Page<City> page = cityRepository.findAll(new Specification<City>(){
@Override
public javax.persistence.criteria.Predicate toPredicate(Root<City> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Path<String> namePath = root.get(“name”);
Path<String> 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?

博客
32132
07-14 368
07-12 301
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值