这篇文章将为大家详细讲解有关怎么在JPA中使用JPQL语句进行增删改查操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强> 1。Java持久化查询语句入门强>
List,人=,entityManager.createQuery (“select  p 得到Person p") .getResultList ();
1。这个查询语句类似于SQL。但它与真正的SQL的区别是,它不是从一个表中进行选择查询,而是指定来自应用程序域模型的实体。
2。查询select子句也只是列出了查询实体的别名,如果只查询某一列的,可以使用点(.)操作符进行来导航实体属性。如下所示:
List,人=,entityManager.createQuery (“select  p.firstName 得到Person p") .getResultList ();
<强> 1.1。筛选条件强>
像SQL一样,JPQL也支持,子句,用于对搜索的条件过滤。包括大多数的操作符,如:在中间,像以及函数表达式子字符串,长度等等
List, persons =, entityManager.createQuery (“select  p 得到Person p where p.age> 23“) .getResultList ();
<强> 1.2。投影结果强>
对于查询的数据量比较大的话,可以使用投影的方式,只查询出有用的列。
//投影List
<强> 1.3。聚合查询强>
JPQL的聚合查询语法类似于SQL。例如计数
List,数=entityManager.createQuery (“select 计数(p),得到Person p") .getResultList ();
<强> 1.4。查询参数强>
JPQL支持两种类型的参数绑定语法。
1。位置参数表示法
其中参数是在查询字符串中指示,该字符串是在一个问号(?)之后紧随参数的编号。当执行查询的时候,开发人员指定应该替换的参数编
Query 查询=entityManager.createQuery (“select  p 得到Person p where p.a ge=? 1,以及p.firstName=? 2“); query.setParameter (21); query.setParameter (2,“Jack");
2。命名参数表示法
通过在一个冒号(:)之后紧随参数名称,在查询字符串对它进行指示,当执行查询的时候,开发人员指定应该替换的参数名称
Query 查询=entityManager.createQuery (“select  p 得到Person p where p.a ge=: age 以及p.firstName=: name"); query.setParameter (“age" 21); query.setParameter (“name",“Jack");
<强> 2。定义查询强>
JPA提供查询和TypedQuery (JPA 2.0引入)接口来配置和执行查询.Query的返回的对象类型,而TypedQuery返回的是指定的类类型。
//未指定类型,返回对象类型 Query q =, entityManager.createQuery (“select  p 得到Person p");//指定返回类型为类人型 TypedQuery<强> 2.1。动态查询定义强>
JPA查询引擎,可以将JPQL字符串解析成语法树,获取表达式中的实体对象,关系映射的元数据,然后生成等价的SQL。故有两种方式进行动态查询。
1。拼接字符串方式
提示:会引起SQL注入问题
/* * ,*动态拼接字符串构建查询条件 ,* ,* @param 名字 ,* @param 年龄 ,* @return ,*/public static  String queryPersonJPQL(名称、String int 年龄),{ ,String queryQL =,“select p 得到Person p where p.firstName=, & # 39;“, +, name +,“& # 39;,以及p.a ge=? +,年龄; ,return queryQL; }//调用 ,Query Query =, entityManager.createQuery (queryPersonJPQL (“jack",, 21));2。动态参数化构建查询条件(推荐使用)
/* * ,*动态参数化构建查询条件 ,* ,* @return ,*/public static  String queryPersonJPQLByParams (), { ,String queryQL =,“select p 得到Person p where p.firstName=: name 以及p.a ge=: age"; ,return queryQL; } Query Query =, entityManager.createQuery (queryPersonJPQLByParams ()); query.setParameter (“name",,“Jack"); query.setParameter (“age",, 21);怎么在JPA中使用JPQL语句进行增删改查操作