写项目写到中间回来查漏补缺,整理一下学习资料,指导老师:"好记性不如烂笔头"。
JPA学习(三):java持久化查询语言JPQL
一、介绍
java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单的查询语义绑定在一起,
使用这种语言编写查询是可移植的,可以被编译成所有主流数据库服务器上的SQL.(面向对象的类sql语句)
二、JPQL运算符
一个核心思想:面向对象。JPQL是面向对象操作的,所以JPQL查询的都是对象或者对象的属性。
JPQL基本查询
// 查询User 表中所有数据:
select u from User u
JPQL算数运算符 { + - * / } [ 只能用于数字 时间类型 ]
select u from User u where (u.inCome - 2000) >= 4000
select u.name from User u where (u.age + 3) >= 65
其他算数运算符同
JPQL关系运算符 { = , > , < , >= , <= , <> } [ > , < , >= , <= , <>(不等于) 一般用于数字类型,时间类型]
select u from User u where u.inCome <> 4000
JPQL逻辑运算符 { not , and , or , like , between , in , is null , is empty , member of } [ is empty , member of 集合中使用]
// 查询User 表中 id 等于1 的记录 select u from User u where u.id = 1
//查询Player 表中 name 中 包含 'king' 的记录 其中 '%' 为通配符。动态查询请点
select p from Player p where p.name like ‘%king%’
select u from User u where u.age in (24,28,30)
select u from User u where not(u.phone is null) //单个属性为空=nullselect u from User u where u.interests is empty //集合属性为空=emptyselect u from User u where :interest member of u.interests //从属于某集合,其中:interset 为动态参数
三、JPQL内置函数
字符串函数
连接函数 : ---------------------------String
concat(String s1, String s2) 取子串函数 :-------------------------String
substring(String s, int start, int length ) 左右去字符或去空格 -------------String
trim( [ leading | trailing | both ] String s1 from String s0 ) 字符串大、小写--------------------String
upper lower ( String s) 取字符串长度
------------------------int length( String s)获取字串在母串的位置-----------int
locate( String s1 , String s)
例:
select
concat(u.name,'同学') from User u //输出时会自动在用户名后加上同学两字
参数介绍(串1,串2) select
substring(u.name,1,1) from User u //截取用户名第一个字符 :
参数介绍(母串,位置,取多长)select trim(leading '小' from u.name) from User u //去掉最左边的 '小' 字:参数介绍(左|右|两边,子串,母串)select upper( 'abC' ) from User u select u.phone , length( u.phone ) from User u select u.name , locate( '小' ,u.name ) from User u //参数介绍( 子串,母串)
日期和时间函数
获取日期-------------CURRENT_DATE 获取时间-------------CURRENT_TIME获取日期和时间---CURRENT_TIMESTAMP
例:
select CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP from User u
算数函数
取绝对值----------------------ABS开算数平方根---------------SQRT去模----------------------------MOD 返回集合中元素的数量--SIZE
例:
select ABS(-99),SQRT( u.age ),MOD(u.age , 10) from User uselect u.name from User u where SIZE( u.interests ) = 2 //返回有两个兴趣的用户的名字,interests是一个集合select u.name from User u where u.interests.size = 2
参考资料
http://www.jikexueyuan.com/course/897.h
http://www.blogjava.net/calmJava/archive/2011/04/01/347450.html
http://docs.oracle.com/javaee/5/tutorial/doc/?wp406229&QueryLanguage.html#wp80587