写项目写到中间回来查漏补缺,整理一下学习资料,指导老师:"好记性不如烂笔头"。
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) //单个属性为空=null
- select u from User u where u.interests is empty //集合属性为空=empty
- select u from User u where :interest member of u.interests //从属于某集合,其中:interset 为动态参数
三、JPQL内置函数
字符串函数
- 连接函数 : ---------------------------String concat(Strings1, 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 //去掉最左边的 '小' 字:参数介绍(左|右|两边,子串,母串)
- selectupper( '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 u
- select 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