选择名称,age from user; //本机SQL语句
select u.name,u.age from User u; //JPQL语句
选择u from user u; //JPQL语句
SQL语句在数据库空间中处理字段、列和行
JQL语句在EJB实体空间中是面向对象的,属性进行操作
JPQL必须由JPA的JPQL解析器解析为SQL才能执行。 必须获取查询对象
参数查询
1命名参数查询
entitymanager.create query (' selectufromuseruwhereu.age=http://www.Sina.com/' );
query.setparameter('param ',24 );
列表器结果=(listuser ) query.get result列表);
双位置参数查询
3358 www.Sina.com/selectufromuseruwhereu.age=http://www.Sina.com/http://www.Sina.com /
查询. set parameter (1,24 );
3实体参数(在JPQL中,除了基本类型外,还可以是对象类型)。
3358 www.Sina.com/selectufromuseruwhereu.person=http://www.Sina.com/http://www.Sina.com /
人员p=new人员(;
p.setid(1;
查询. set parameter (1,p );
JPQL运算符
算术运算符- * /
关系运算符===
逻辑运算符between,like,in,is null,is empty,member of,not,and,or
1不
' selectufromuseruwherenot (u.cityid=? 1 ) '
2 between与sql相同
用指定的3合数值列表进行咨询
' selectufromuseruwhereu.cityid in (1,2,3 ) '
4like(_表示一个字符,%表示任意数量的字符) )。
xxxx where u.name like '张% '
5 is null (实体属性是否为空,即实体属性映射中的字段是否为空)。
' selectufromuseruwhereu.cityid is null '
6 isempty (与is null不同,实体的集合属性中是否有元素。
集合对象存在,但集合中没有元素)
selectofromorderowhereo.orderitems isempty
条件查询
1排序查询asc升序desc降序
order by p.age desc,p.birthday asc
2聚合函数查询
返回avg (平均值、双计数)、长最大值、最小值)、和
上述非计数函数的参数对应于一个名为属性的字段,而不是对象
HAVING和WHERE的区别。 一是分组后,再筛选小组; 一种是先筛选,然后将筛选出的记录分组。
构建器查询
' select newcom.jsun.person (p.name ) from Person p )。
如果人员具有此构造函数,即人员(字符串名称)成功返回到对象。
关联查询(实际工作中仍有此需求) ) ) )。
左连接允许右侧实体表达式中的实体为空。 其中实体是指集合属性
inner join的右侧必须存在
' selectofromorderoinnerjoino.orderitems '
在默认查询中,集合属性懒惰加载。 只有在使用时,JPA才会重新发送SQL语句
在调查的时候我们想一次抓住全部怎么办? 使用fetch
(其实left join和inner join主要配合fetch,在这里用于一次抓取。 因为默认值是懒惰的加载)
' selectofromorderoinnerjoinfetcho.orderitems '
排除同一记录DISTINCT
select distinct o from Order o
(也可以与聚合函数一起使用)
例如,选择计数(distinct o ) from Order o
:param
字符串函数
concat(str1,str2) )。
substring (字符串、位置、长度) )。
trim ([ leading ] sub _ strfromstr ) ) ) )。
是upper(str )
是低速(str )
是长度(str )
位置(搜索字符串,init位置) )。
日期、时间函数
CURRENT_DATE //返回当前日期。 这是数据库端的时间。
CURRENT_TIME //返回当前时间
CURRENT_TIMESTAMP //返回当前日期和时间
数学函数
ABS(number )//绝对值
sqrt (编号)//平方根
mod(num,div )//模具
返回size(collection )//集合中的元素数
例如,selectofromorderowheresize (o.items ) 10
"
xxxx in ) )子查询
xxxx not in )子查询
exists )子查询
存在notexists (子查询) exists意味着子查询的结果不空或存在
?1
使用了query接口的两种方法
setmaxresults(int )//通过设定获取的记录数
和setfirstresult(int )//从结果集开始的索引。 默认情况下,索引从0开始
这两个方法都返回Query对象,因此可以配置方法链
query.setmaxresults(max ).setfirstresult (index ).getResultList ) )
"
建议将所有批量操作与不连续的事务隔离。
批量操作可能会导致被管理实体与数据库不匹配
http://www.Sina.com/http://www.Sina.com /
query query=entitymanager.createnativequery (' { call pro _1)? () );
query.setparameter(1,' jsun ';
//无返回值存储过程
query.executeUpdate (;
//返回单个值的存储过程
stringresult=(string ) query.getSingleResult );
//返回所有列的存储过程
listuserresults=(listuser ) query.getResultList );
//返回某些列的存储过程
listobject [ ] results=(listobject [ ] ) query.getResultList (;
for(object[]row:results ) {
row[0],row[1]
}