开篇广告
自己开发的淘宝领券网站:q.hayye.cn(手机打开)
要说特色,应该没有,硬要说的话就是没广告、没推送,简单好用。
前端开源地址:https://gitee.com/hayye/tbq
后端不开源……
欢迎大家加群讨论技术,不定时也会有淘宝神券发放!
正文开始
简介
JPQL语法基本与SQL一直,不同点在于SQL操作数据库表,而JPQL操作实体模型。
JPQL是一种独立于平台的查询语言,简单而强大。JPA会在执行时将JPQL自动转换为对应的SQL,可做到兼容任何类型数据库。
使用
看下面例子:
语法与SQL几乎保持一致,需要注意的是,jpql操作对象,所以Book b相当于创建了一个Book类的对象b,搜索字段、条件判断等都需要适用对象b完成。
传参方法有两种:
一种是例子中的 ?1 这种(?+数字)的形式;
另一种就是 :id 这种(:+参数名)的形式;
数字形式需要注意要从1开始,参数名下面例子会有示例。
String jpql="select b from Book b where b.id = ?1";
Query query = entityManager.createQuery(jpql);
query.setParameter(1,id);
Book book = (Book) query.getResultList().get(0);
上面的例子是普通的方法实现jpql查询,还有一种预查询方法通过注解实现。
@NamedQuery
@Entity
@NamedQuery(name = "selectById",query = "select b from Book b where b.id = :id")
public class Book {
...
}
在实体类上方使用@NamedQuery注解,定义name和query即可。调用则使用createNamedQuery方法即可
Query query = entityManager.createNamedQuery("selectById");
query.setParameter("id",1);
Book book = (Book) query.getResultList().get(0);
此例中使用了:id形式的传参方法
附:Demo源码 https://github.com/hayye/JPADemo