JPA学习笔记(12)——JPQL

                       

Query接口

int executeUpdate()

用于执行update或delete语句。

List getResultList()

用于执行select语句并返回结果集实体列表。

Object getSingleResult()

3用于执行只返回单个结果实体的select语句。

Query setFirstResult(int startPosition)

用于设置从哪个实体记录开始返回查询结果。

Query setMaxResults(int maxResult)

用于设置返回结果实体的最大数。与setFirstResult结合使用可实现分页查询。

Query setFlushMode(FlushModeType flushMode)

设置查询对象的Flush模式。

参数可以取2个枚举值:

  1. FlushModeType.AUTO 为自动更新数据库记录

  2. FlushMode Type.COMMIT 为直到提交事务时才更新数据库记录。

setHint(String hintName, Object value)

设置与查询对象相关的特定供应商参数或提示信息。参数名及其取值需要参考特定 JPA 实现库提供商的文档。如果第二个参数无效将抛出IllegalArgumentException异常。

setParameter(int position, Object value)

为查询语句的指定位置参数赋值。Position 指定参数序号,value 为赋给参数的值。

setParameter(int position, Date d, TemporalType type)

为查询语句的指定位置参数赋 Date 值。Position 指定参数序号,value 为赋给参数的值,temporalType 取 TemporalType 的枚举常量,包括 DATE、TIME 及 TIMESTAMP 三个,,用于将 Java 的 Date 型值临时转换为数据库支持的日期时间类型(java.sql.Date、java.sql.Time及java.sql.Timestamp)。

setParameter(int position, Calendar c, TemporalType type)

为查询语句的指定位置参数赋 Calenda r值。position 指定参数序号,value 为赋给参数的值,temporalType 的含义及取舍同前。

setParameter(String name, Object value)

为查询语句的指定名称参数赋值。

setParameter(String name, Date d, TemporalType type)

为查询语句的指定名称参数赋 Date 值。用法同前。

setParameter(String name, Calendar c, TemporalType type)

为查询语句的指定名称参数设置Calendar值。name为参数名,其它同前。该方法调用时如果参数位置或参数名不正确,或者所赋的参数值类型不匹配,将抛出 IllegalArgumentException 异常。

注意:在jpql中,如果是查询结果是对象,那么from关键字后面跟类名,如果查询结果是一个字段,那么要使用表名
例如:(User类对应t_user表)
查询对象:“from User where id = ?”
查询某个字段:”select u.NAME from t_user where u.ID = ?”

createQuery

String jpql = "FROM User u WHERE u.id = ?";Query query = entityManager.createQuery(jpql);query.setParameter(1, 1);//第一个参数是占位符的位置,从1开始,第二个参数是要传入的参数User user = (User) query.getSingleResult();System.out.println(user);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

查询部分属性:

//获取部分属性String jpql1 = "SELECT u.id,u.name FROM User u where u.id > ?";List result = entityManager.createQuery(jpql1).setParameter(1, 1).getResultList();System.out.println(result);
   
   
  • 1
  • 2
  • 3
  • 4

结果:
这里写图片描述

默认情况下,如果只查询部分属性,则返回Object[] 类型的结果,或者Object[] 类型的List

如果希望返回的是对象,可以这样写:

  1. 在实体类中创建对应的构造器
  2. 在JPQL语句中,利用构造器返回实体类的对象
public User (){}public User(Integer id,String name){    this.id = id;    this.name = name;}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
//获取部分属性String jpql1 = "SELECT new User(u.id,u.name) FROM User u where u.id > ?";List result = entityManager.createQuery(jpql1).setParameter(1, 1).getResultList();System.out.println(result);
   
   
  • 1
  • 2
  • 3
  • 4

结果:
这里写图片描述

createNamedQuery

适用于实体类前适用@NamedQuery标记的查询语句
User

@NamedQuery(name="userQuery",query="from User u where u.id = ?")@Table(name="T_USER")@Entitypublic class User 
   
   
  • 1
  • 2
  • 3
  • 4

查询

User user = (User) entityManager.createNamedQuery("userQuery").setParameter(1, 1).getSingleResult(); System.out.println(user);
   
   
  • 1
  • 2

createNativeQuery

适用于本地SQL

String jpql = "SELECT u.NAME FROM t_user u where u.id = ?";Query query = entityManager.createNativeQuery(jpql).setParameter(1, 1);Object result = query.getSingleResult();System.out.println(result);
   
   
  • 1
  • 2
  • 3
  • 4
           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43678306/article/details/86225449
今日推荐