JPQL 的基本使用
一、概念
JPQL 语言,即 Java Persistence Query Language 的简称。JPQL 和 HQL 是非常类似的,支持以面向对象的方式来写 SQL 语句,当然也支持本地的 SQL 语句。JPQL 最终会被编译成针对不同底层数据库的 SQL 查询从而屏蔽掉不同数据库的差异。
1、API
javax.persistence.Query 接口封装了执行数据查询的相关方法。主要方法如下:
- int executeUpdate():用于执行 update 或 delete 语句。
- List getResult():用于执行 select 语句并返回结果集实体列表。
- Object getSingleResult():用于执行返回单个结果实体的 select 语句。
- Query setFirstResult(int startPosition):用于设置从指定行数返回查询结果。
- Query setMaxResults(int maxResult):用于设置结果实体的最大数目。
- setParameter(int position, Object value):为查询语句的指定位置参数赋值。下标从 1 开始。
二、用法实例
查询:
package test.java; import com.yunche.helloworld.Customer;
import com.yunche.helloworld.Order;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import javax.persistence.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set; /**
* @ClassName: MappingTest
* @Description: 测试类
* @author: yunche
* @date: 2019/01/18
*/
public class MappingTest { private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
private EntityTransaction transaction; @Before
public void init() {
entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
} @After
public void destroy() {
transaction.commit();
entityManager.close();
entityManagerFactory.close();
} @Test
public void testSelectJPQL() {
String jpql = "FROM Customer WHERE id = ?1";
Query query = entityManager.createQuery(jpql);
query.setParameter(1, 1);
Customer customer = (Customer) query.getSingleResult();
System.out.println(customer.getName());
}
}
修改:
@Test
public void testUpdateJPQL() {
String jpql = "UPDATE Customer SET name=?1 WHERE id=?2";
Query query = entityManager.createQuery(jpql);
query.setParameter(1, "Bob").setParameter(2, 1);
// 返回受影响的行数
System.out.println(query.executeUpdate());
}
添加(没有 INSERT):
/**
* 试了下, JPQL 中没有 INSERT 这个测试用例是通不过的
* 可能为了让们我尽量使用 EntityManager 中的 persist() 方法吧,也是 JPA 毕竟提倡我们少写 SQL
*/
@Test
public void testInsertJPQL() {
String jpql = "INSERT INTO Customer(name, email, age) VALUES(?1, ?2, ?3)";
Query query = entityManager.createQuery(jpql);
query.setParameter(1, "Mike").setParameter(2, "Mike@163.com").setParameter(3, 20);
System.out.println(query.executeUpdate());
}
删除:
@Test
public void testDeleteJPQL() {
String jpql = "DELETE FROM Customer WHERE id = ?1";
Query query = entityManager.createQuery(jpql);
query.setParameter(1, 1);
System.out.println(query.executeUpdate());
}
JPQL 的基本使用的更多相关文章
- Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...
- [转] JPQL
原文地址:http://blog.csdn.net/suncaishen/article/details/6512028 select name ,age from user; //原生SQL语句 s ...
- JPA学习(6)JPQL
JPQL语言,即 Java Persistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查 ...
- JPA学习---第八节:使用JPQL语句进行查询
1.JPQL 语句查询,代码如下: @Test public void query(){ EntityManagerFactory factory = Persistence.createEntity ...
- JavaEE(17) - JPA查询API和JPQL
1. 获取查询结果 2. JPQL函数和JPQL表达式 #1. 使用from子句 #2. 查询部分属性 #3. 查询中使用构造器 3. JPQL的关联查询和多态查询 #1. 多态查询 #2. 隐式连接 ...
- JPQL
JPQL语言 JPQL语言,即 Java Persistence Query Language 的简称. JPQL是一种和 SQL 非常类似的中间性和对象化查询语言, 它最终会被编译成针对不同底层数据 ...
- 如何使用JPQL写纯SQL语句
使用JPQL,需要把SQL语句修改成类似HQL 语句.SQL 查询的是数据库,而JPQL 查询的是对象和属性,在语法上是有些不同的.对于有些用JPQL 无法写出来的查询,还是使用原生SQL写出来方便 ...
- JPQL的关联查询
一般情况下,直接使用mysql语句写关联语句,是join on 的形式,如下: select * from tablea as a left join tableb as b on b.tablea_ ...
- JPQL设置自增长、只读、文本类型等的注解
JAVA中使用JPQL 一种设置id自动生成,自增长的方法 private long id; @Id @GeneratedValue(generator="_native") @G ...
- JPQL模糊匹配单个字符
JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个 ...
随机推荐
- REST技术第二步 获取URL中的參数
获取请求的參数.rest技术相对于servlet来说要方便很多. Servlet我们要获取请求的參数,非常麻烦啊.须要request.getParameter("").假设我们要的 ...
- 2016/2/18 html 标签 表格
①打开dreamw新建html 开头显示如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- ios28--UIScrollView
// // ViewController.m // UIScrollVIew #import "ViewController.h" @interface ViewControlle ...
- JLabel作为展现元素时需要注意的事项
如果没有内容,JLabel默认透明就无法作为点击区域了,所以为了让其可以响应鼠标事件需要设置 setOpaque(true) 这样就可以响应鼠标事件了 (吐槽一下,多年以前在大学做个web地图导航的网 ...
- BZOJ_2160_拉拉队排练_manacher
BZOJ_2160_拉拉队排练_manacher Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛 ...
- ODB(C++ ORM)用Mingw的完整编译过程
用mingw官方的GCC4.7.2编译libodb后,并用odb compiler对hello示例生成odb的"包裹"代码,编译链接总是不能通过,下面是编译example/hell ...
- bzoj 2199: [Usaco2011 Jan]奶牛议会【2-SAT】
好久没写2-SAT了啊,还以为是网络流 设点x为选,x'为不选,因为一头牛至少要满足一个条件,所以对于牛条件的两个点,选了一个不符合的点,就要选另一个符合的点,这样连两条边 然后枚举所有议案的选和不选 ...
- 17年day2
/* 嗯,明天就出发了. 嗯,终于快要结束了. 考试日常挂T1 今天晚上老师们请我们吃水饺,还有一个大蛋糕. 虽然没怎么吃蛋糕23333 还好我的水饺是白菜馅的~~~ 晚上学哥学姐们发视频送祝福,谢谢 ...
- Final关键字解析
final 在 Java 中是一个保留的关键字,可以声明变量.方法.类. 什么是final变量 / 类 / 方法? 任何变量前被 final 修饰就是 final 变量,定义的类前被 final 修饰 ...
- 基于.Net Core的API框架的搭建(3)
5.加入缓存支持 我们希望为项目增加缓存支持,我们选择Redis做为缓存数据库. 首先,我们在Services目录增加一个缓存接口类ICacheService: using System; using ...