深入浅出学Spring Data JPA toPredicate Predicate[] p = new Predicate[list.size()]; query.where(cb.and 201
序言自工作以来,除了以前比较流量的hibernate,就是一直使用ORM 规范 JPA了.而这几天工作需要,研究了下JPA的标准查询,名为:JPA criteria查询.相比JPQL,其优势是类型安全,更加的面向对象.使用标准查询,开发人员可在编译的时候就检查查询的正确与否.而以前也只是在Hibernate中听说有过.具体不详,没用过.JPA元模型概念,及使用在JPA中,标准查询是以元模型的概念为基础的.元模型是为具体持久化单元的受管实体定义的.这些实体可以是实体类,嵌入类或者映射的父类.提供受管实体元信息的类就是元模型类.描述受管类的状态和他们之间的关系的静态元模型类可以1.从注解处理器产生2.从程序产生3.用EntityManager访问.如下code,一个简单的实体类package com.demo.entities;下,实体类Employee ,假设该实体有诸如id,name和age的基本属性,还有与类Address的OneToMany关联:01 @Entity02 @Table03public class Employee{ 04 private int id; 05 private String name;06 private int age;07 @OneToMany08 private List
第一章:Spring Data JPA入门
第二章:JpaRepository基本功能
第三章:JpaRepository的查询
第四章:客户化扩展JpaRepository
- public class UserRepositoryImpl {
- @PersistenceContext
- private EntityManager em;
- public Page<Object[]> getByCondition(UserQueryModel u){
- String hql = "select o.uuid,o.name from UserModel o where 1=1 and o.uuid=:uuid";
- Query q = em.createQuery(hql);
- q.setParameter("uuid", u.getUuid());
- q.setFirstResult(0);
- q.setMaxResults(1);
- Page<Object[]> page = new PageImpl<Object[]>(q.getResultList(),new PageRequest(0,1),3);
- return page;
- }}
第五章:Specifications查询
- Specification<UserModel> spec = new Specification<UserModel>() {
- public Predicate toPredicate(Root<UserModel> root,
- CriteriaQuery<?> query, CriteriaBuilder cb) {
- List<Predicate> list = new ArrayList<Predicate>();
- if(um.getName()!=null && um.getName().trim().length()>0){
- list.add(cb.like(root.get("name").as(String.class), "%"+um.getName()+"%"));
- }
- if(um.getUuid()>0){
- list.add(cb.equal(root.get("uuid").as(Integer.class), um.getUuid()));
- }
- Predicate[] p = new Predicate[list.size()];
- return cb.and(list.toArray(p));
- }
- };
- Specification<UserModel> spec = new Specification<UserModel>() {
- public Predicate toPredicate(Root<UserModel> root,
- CriteriaQuery<?> query, CriteriaBuilder cb) {
- Predicate p1 = cb.like(root.get("name").as(String.class), "%"+um.getName()+"%");
- Predicate p2 = cb.equal(root.get("uuid").as(Integer.class), um.getUuid());
- Predicate p3 = cb.gt(root.get("age").as(Integer.class), um.getAge());
- //把Predicate应用到CriteriaQuery中去,因为还可以给CriteriaQuery添加其他的功能,比如排序、分组啥的
- query.where(cb.and(p3,cb.or(p1,p2)));
- //添加排序的功能
- query.orderBy(cb.desc(root.get("uuid").as(Integer.class)));
- return query.getRestriction();
- }
- };
@Overridepublic Page<Trace> findTracePage(int page, int size, SortModel sortModel, final Long companyId) { String sortCol = sortModel.getSortCol(); if (StringUtils.isEmpty(sortModel.getSortCol())) { sortCol = "createTime"; } Sort sort = new Sort(Direction.DESC, sortCol); if (sortModel.getSortDirect() != null && sortModel.getSortDirect().equals(SortModel.DIRECT_ASC)) { sort = new Sort(Direction.ASC, sortCol); } Pageable pageable = new PageRequest(page, size, sort); Page<Trace> list = traceRepository.findAll(new Specification<Trace>() { @Override public Predicate toPredicate(Root<Trace> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> list = new ArrayList<Predicate>(); if (null != companyId) { list.add(cb.equal((root.get("shippingOrder").get("company").get("id").as(Long.class)), companyId)); } Predicate[] p = new Predicate[list.size()]; query.where(cb.and(list.toArray(p))); query.groupBy(root.get("shippingOrder").get("orderNumber")); //query.getGroupRestriction(); return query.getGroupRestriction(); } }, pageable); return list;}
深入浅出学Spring Data JPA toPredicate Predicate[] p = new Predicate[list.size()]; query.where(cb.and 201相关推荐
- 深入浅出学Spring Data JPA , Predicate
转自:https://blog.csdn.net/qq_19936739/article/details/76176927 序言 自工作以来,除了以前比较流量的hibernate,就是一直使用ORM ...
- 深入浅出学Spring Data JPA
第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...
- Spring Data JPA 教程(翻译)
写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...
- Spring Data JPA
1. 概述 Spring JPA通过为用户统一创建和销毁EntityManager,进行事务管理,简化JPA的配置等使用户的开发更加简便. Spring Data JPA是在Spring JPA ...
- Spring data jpa 条件查询-按时间段查询
Spring data jpa 条件查询-按时间段查询 @Overridepublic Page<泛型> findRecordList(int couponDetailId, int pa ...
- spring data jpa实现有条件的分页查询功能
spring data jpa实现有条件的分页查询功能 前端部分代码.发送请求: $('#grid').datagrid({iconCls: 'icon-forward',fit: true,bord ...
- 学习Spring Data JPA
简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特殊 ...
- Spring Data JPA入门
见:http://sishuok.com/forum/blogPost/list/7000.html Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框 ...
- Spring Data JPA 从入门到精通~实际工作的应用场景
在实际工作中,有哪些场景会用到自定义 Repository 呢,这里列出几种实际在工作中的应用案例. 1. 逻辑删除场景 可以用到上面说的两种实现方式,如果有框架级别的全局自定义 Respositor ...
最新文章
- 23设计模式简介笔记
- Ubuntu下python升级pip(ImportError: cannot import name 'main')
- [gic]-中断虚拟化-Host和Guest的中断处理流程举例(gicv3举例)
- python面向对象-4类的继承与方法的重载
- 【STM32】 keil软件工具--configuration详解(下)
- cocos 时间函数需要什么引用_酱香型白酒,为什么需要长时间储存?
- activemq和mysql_activeMQ 填坑记
- python如何另存文件_脚本将.py保存到文件中的另一个目录
- NYOJ--975--关于521
- 直接插入排序-java
- html5实现留言功能,javascript实现留言板功能
- 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错解决办法
- cacti监控H3C交换机
- 绿地五里桥 设计原型_绿地 · 黄浦滨江项目设计
- Stream流的常用方法以及代码练习
- CESM学习笔记(CIME)1 :介绍和query_config
- Xcode warning: code will never be executed.
- 更换VS2015——>VS2019
- Revit二开--批量修改视图范围(revit宏)
- Group Box组合框的简单使用