Spring Data Jpa >>JpaSpecificationExecutor 查询语句
2018-03-20 14:47
621 查看
Repository 必须继承
1.两张表 一对一关系 进行查询
2.如果查询的字段为Null
我的理解是当需要把字段为空设置成过滤字段时 就需要重载。
3.使用SpecificationExecutor 实现多表查询(GeReRepository实现了SpecificationExecutor接口)
类似于1的sql语句
4.使用SpecificationExecutor 实现复杂查询,查询值为null
查询productName字段为null 的值
@Repository public interface GeReRepository extends JpaRepository<Ge,Long>, JpaSpecificationExecutor<Ge> { }
1.两张表 一对一关系 进行查询
@Query("select bu from Ge bu where bu.itemName=(?1) and bu.billData=(?2) and bu.billLineItem.productName =(?3)") List<Ge> findByItemNameAndBillDataAndVmId(String itemName,BillData billData,String productName);
2.如果查询的字段为Null
@Query("select bu from Ge bu where bu.itemName=(?1) and bu.billData=(?2) and bu.billLineItem.productName is null") List<Ge> findByItemNameAndBillDataAndVmId(String itemName,BillData billData);
我的理解是当需要把字段为空设置成过滤字段时 就需要重载。
3.使用SpecificationExecutor 实现多表查询(GeReRepository实现了SpecificationExecutor接口)
List<Ge> result = billUsageReRepository.findAll(new Specification<Ge>() { @Override public Predicate toPredicate(Root<Ge> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // TODO Auto-generated method stub List<Predicate> list = new ArrayList<Predicate>(); list.add(cb.equal(root.get("itemName").as(String.class), "S")); //list.add(cb.equal(root.get( 4000 "billLineItem.productName").as(String.class), "V")); list.add(cb.equal(root.get("billLineItem").get("productName").as(String.class), "V")); Predicate[] p = new Predicate[list.size()]; query.where(cb.and(list.toArray(p))); return query.getRestriction(); } } );
类似于1的sql语句
root.get("billLineItem").get("productName") 相当于构建路径 root.get("billLineItem.productName")这样是错的
4.使用SpecificationExecutor 实现复杂查询,查询值为null
查询productName字段为null 的值
List<Ge> result = billUsageReRepository.findAll(new Specification<Ge>() { @Override public Predicate toPredicate(Root<Ge> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // TODO Auto-generated method stub List<Predicate> list = new ArrayList<Predicate>(); list.add(cb.equal(root.get("itemName").as(String.class), "SMS1")); //list.add(cb.equal(root.get("billLineItem.productName").as(String.class), "V")); // list.add(cb.equal(root.get("billLineItem").get("productName").as(String.class),"V")); list.add(cb.isNull(root.get("billLineItem").get("productName").as(String.class))); Predicate[] p = new Predicate[list.size()]; query.where(cb.and(list.toArray(p))); return query.getRestriction(); } } );
相关文章推荐
- Spring Data JpaSpecificationExecutor 做复杂查询
- spring data jpa 利用JpaSpecificationExecutor做复杂查询
- JpaSpecificationExecutor<T>不是单独使用
- spring data jpa 利用JpaSpecificationExecutor做复杂查询
- CrudRepository<T, >JpaSpecificationExecutor<T>
- SpringDataJpa的Specification查询
- SpringDataJPA原生语句查询复合结果集代码举例
- JPA开发总结<二>--基本操作+JPQL查询
- jpa多条件查询重写Specification的toPredicate方法
- JPA查询之Specification以及HQL、SQL查询
- 调用play的jpa查询数据时添加Transformers.ALIAS_TO_ENTITY_MAP可将结果集封装到list<map>对象里
- spring-data-jpa Specification 拼接复杂查询
- jpa动态查询语句
- JPA Specification常用查询+排序
- SpringDataJpa的Specification查询
- Func<T,T>应用之Elasticsearch查询语句构造器的开发
- spring data 接口之 JpaRepository,JpaSpecificationExecutor
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- Spring Data Jpa 使用@Query标注自定义查询语句
- jpa多条件查询重写Specification的toPredicate方法