JPA学习(三):java持久化查询语言JPQL--介绍、基础语法

时间:2022-09-22 09:46:16

写项目写到中间回来查漏补缺,整理一下学习资料,指导老师:"好记性不如烂笔头"。


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