当前位置:文档之家› 第11章 JPA的查询支持

第11章 JPA的查询支持

– setFirstResult:记录的开始位置 – setMaxResult:返回记录的条数
• 实际操作演示
子查询和命名查询
• 子查询:在一个查询中包含另外一个查询
– 例如:select 属性名 from 实体类 where 属性 名>(select avg(属性名2) from 实体类2)
• 命名查询:在Annotation中定义JPQL查询 语句。
关联和连接
• JPQL查询除了行多表连接查询。 • 这种多表连接查询既可以是隐式连接,也 可以是显示连接。
• 实际操作演示
使用order by进行排序
• 查询返回的集合可以根据实体或符合属性的 任何属性使用order by进行排序。 • 还可以使用asc或desc关键字指定升序或降 序的排序规则。 • 默认是升序规则。
• JPQL内置了大量功能强大的函数,可以 更有效的执行查询,设置查询结果。 • JPQL的内置函数有:
– 字符串函数 – 数学函数 – 日期、时间函数
• 实际操作演示
多态查询
• 当查询实体类时,不仅可以查询该实体类 的全部实例,还会查询出该类的子类的全 部实例。 • 必须具有继承关系。 • 实际操作演示
– from 实体类名 [as] 实体别名
• 尽量避免在from后跟多个实体类名
• 实际操作演示
使用select子句
• select子句用于选择指定的属性或之际选 择某个实体。常用的格式如下:
– select 实体别名.实体属性1,实体别名.实体属 性2...... from......
• 如果select后有多个项,则查询出来的集 合元素就是相应类型的数组。 • 实际操作演示
存储过程简介
• 存储过程通常有以下优点: – 存储过程增强了SQL语言的功能和灵活性。 – 存储过程允许标准组件式编程。 – 存储过程能实现较快的执行速度。 – 存储过程能过减少网络流量。 – 存储过程可被作为一种安全机制来充分利用。
存储过程简介
• MySQL存储过程共有三种参数类型 ,IN,OUT,INOUT,形式如:
– CREATE PROCEDURE([[IN |OUT |INOUT ] 参 数名 数据类型...]) – IN 输入参数:表示该参数的值必须在调用存储过程 时指定,在存储过程中修改该参数的值不能被返 回,为默认值。 – OUT 输出参数:该值可在存储过程内部被改变,并 可返回。 – INOUT 输入输出参数:调用时指定,并且可被改变 和返回。
概述
• 使用原生SQL查询的过程很简单,主要使 用EntityManager的 CreateNativeQuery(String sql)方法即可 创建一个代表原生SQL查询的Query对象 ,接下来就可以利用该Query对象执行查 询了。 • 实际操作演示
结果集映射和实体查询
• 原生SQL查询的结果集,里面的每个元素, 要么是数组,要么是List集合。 • 可以对查询结果集里面的元素映射成查询实 体,或将查询结果映射为普通的数据列。 • @SqlResultSetMapping • @SqlResultSetMappings • 实际操作演示
select 实体别名.属性名,... from 实体名 [as] 实体别名 where 实体别名.实体属性 op 比较值
查询API简介
• JPQL的查询主要由Query接口来完成 • JPQL查询的步骤:
– Query的创建
• createQuery(String JPQLString) • 其他重载方法
– Query设置查询参数
• setParameter(...) • 其他重载方法
– Query执行查询
• getResultList() • 其他查询方法
目录
• • • • • 查询API 执行查询 JPQl语法 批量更新和批量删除 原生SQL查询
执行查询
• 位置参数:
– ?位置编号
• 命名参数:
• 执行update方法返回的结果是记录个数。
• 实际操作演示
批量删除
• 批量删除使用delete语句。
– delete <ClassName> [where where _conditions]
• 执行update方法返回的结果是记录个数。
• 实际操作演示
目录
• • • • • 查询API 执行查询 JPQl语法 批量更新和批量删除 原生SQL查询
– @NamedQuery
• name:命名查询的名称 • query:查询语句
– @NamedQueries
• 用法参考本页PPT注解
• 实际操作演示
目录
• • • • • 查询API 执行查询 JPQl语法 批量更新和批量删除 原生SQL查询
批量更新
• 批量更新使用update语句。
– update <ClassName> set ... [where where _conditions]
经典 Java EE 课程
段鹏松
第11章 JPA的查询支持
课程目标
掌握JPA查询的基本流程 掌握JPQL的基本语法 了解在JPA中使用原生SQL查询
概述
• JPA定义了一套属于面向对象的查询语言: Java Persistence Query Language(JPQL) • JPQL是面向对象的查询语言,因此它完全可 以理解继承、多态和关联等特性。
• where子句用于筛选查询的结果,缩小查 询的范围。常用的格式如下:
– select 实体别名.实体属性1,实体别名.实体属 性2...... from...... where 条件表达式
• 条件表达式中可以采用精确查找,也可以 采用模糊查找。 • 常用的条件运算符都支持。 • 实际操作演示
使用JPQL函数
• 实际操作演示
聚集函数和分组
• JPQL的聚集函数
– avg – count – max – min – sum
• 返回聚集值的查询可以对实体类或组件的 属性使用group by进行分组。 • 实际操作演示
结果集分页
• 分页指的是获取查询记录中指定范围的记 录,在显示的时候非常有用。 • JPQL中的Query接口中提供了如下两个方 法进行分页控制:
查询中使用构造器
• JPQL允许在查询中根据选出的属性来创 建对象。常用的格式如下:
– select new className(属性名1,属性名2 ,...) from ...
• 必须存在相应的构造函数。 • 查询出来的集合元素就是相应类型的构造 类型。 • 实际操作演示
where子句和条件表达式
• JPQL内置了大量函数,极大地方便了数据库 查询操作。
目录
• • • • • 查询API 执行查询 JPQl语法 批量更新和批量删除 原生SQL查询
面向对象的JPQL
• SQL和JPQL最大的区别
– SQL是面向数据库的查询语言 – JPQL是面向对象的查询语言,类似HQL
• JPQL的基本语法格式
调用存储过程
• JPQL允许通过Query来调用存储过程,调 用存储过程相当于执行原生SQL查询。 • 格式如下
– call 存储过程名 (?1,?2,...) • 注意:
– 如果要给存储过程传参数,必须带编号 – 不要带大括弧
• 实际操作演示
本章小结
• • • • 学习了JPA的查询 学习了JPQL语言的基本用法 学习了批量修改和批量删除操作 注意各种不同查询的用法
– :参数名
• 查询结果
– 一条记录,使用getSingleResult() – 多条记录,使用getResultList()
• 实际操作演示
简单示例(位置参数查询)
Query query =em.createQuery ("select p from Flentity p where p.f_name=?1"); query.setParameter(1,"A1");
return query.getResultList();
目录
• • • • • 查询API 执行查询 JPQl语法 批量更新和批量删除 原生SQL查询
概述
• 经过前面的学习,已经掌握了JPQL的基 本查询流程。 • 本小节主要讲述JPQL查询的细节,知识 点较为零碎。
使用from子句
• from子句用于查询指定的实体,其后紧跟 实体类的类名。常用的格式如下:
return query.getResultList();
简单示例(命名参数查询)
Query query =em.createQuery ("select p from Flentity p where p.f_name=:name"); query.setParameter(“name”,"A1");
相关主题