JPQL 的基本使用
Posted yunche
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, "[email protected]").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 的基本使用的主要内容,如果未能解决你的问题,请参考以下文章