深入浅出学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 ...
最新文章
- LeetCode简单题之丢失的数字
- golang已关闭channel
- 驾驶卡丁车 模拟,迷宫(女赛)
- 【数据结构与算法】之深入解析“回文数”的求解思路和算法示例
- iOS学习笔记37 时间和日期计算
- 深度Linux对比比,深度Linux10.06 beta1与ylmfOS 3.0简单对比
- android4.0 底部菜单,Android自定义控件系列(四)—底部菜单(下)
- Go 能拯救已经失败的可视化编程?
- python几种设计模式_Python七大原则,24种设计模式
- linux免费私人云盘软件,Appnode+kodexplorer免费搭建私有云盘
- intel h61 linux驱动下载,IntelIntel DH61AG BIOS 0022.BI主板驱动官方正式版下载,适用于dos-驱动精灵...
- 东方财富开通融资融券知识测评问卷答案
- 单片机学习笔记(五)—— 键盘
- 计算机主机安装图,最新版本:计算机主机插件安装图_布法罗计算机主板安装图...
- Hyper-V虚拟机安装XP系统
- Android安卓应用发布平台汇总
- Qt 表格导出数据为 excel html csv
- 关于搜狗输入法如何导入本地词库(超详细版)
- FontReplacer
- ceva-dsp领域的arm
热门文章
- 变量定义需放在当前代码的最前面,吃亏了出bugg了
- 程序员学完深入理解计算机系统,深入理解计算机系统9个重点笔记
- 开发软件是否等于写程序?
- 题目:身份证录入系统 一、语言和环境 a)实现语言Java, 使用Android开发环境实现《身份证录入系统》APP。具体要求如下: 打开应用后,显示效果如图-1所示:
- 魔兽世界模拟器注册器
- Educational Codeforces Round 105 (Rated for Div. 2) A-D题解
- 鸿蒙系统实用小技巧,【AVW分享】鸿蒙系统使用技巧,你都知道有哪些吗?
- 微信开发者工具的版本管理如何使用
- 人物角色建模 镰刀链男人物模型制作过程分享教程
- C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策