Jpql入门
JPQL (Java Persistence Query Language)介绍
- 基于首次在 EJB2.0 中引入的 EJB 查询语言(EJB QL),Java 持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将 SQL 语法和简单查询语义绑定在一起。使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的 SQL。其特征与原生 SQL 语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。
1.1 查询所有
- 代码实现
package com.cui;
import com.cui.utils.JapUtils;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import java.util.List;
public class jpqlTest {
@Test
public void testfindAll(){
//获取emtityManager对象
EntityManager em = JapUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
String spql = "from Customer ";
Query query = em.createQuery(spql);//创建Query查询对象,query对象才是执行jpql的对象
//发送查询,并封装结果集
List list = query.getResultList();
for (Object obj : list){
System.out.println(obj);
}
//4.提交事务
tx.commit();
//5.释放资源
em.close();
}
}
1.2查询所有并倒叙排列
/**
* 排序查询:倒叙查询所有用户(根据d倒叙)
* sql:select * from cst_customer order by custId desc
* jpql: from Customer order by custId desc
* 1.创建Query查询对象
* 2.对参数进行赋值
* 3.查询,得到返回结果
*/
@Test
public void testfindAllWithOrder(){
//获取emtityManager对象
EntityManager em = JapUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.查询全部
String spql = "from Customer order by custId desc ";
Query query = em.createQuery(spql);//创建Query查询对象,query对象才是执行jpql的对象
//发送查询,并封装结果集
List list = query.getResultList();
for (Object obj : list){
System.out.println(obj);
}
//4.提交事务
tx.commit();
//5.释放资源
em.close();
}
1.3 统计查询
/**
*使用jpql查询,统计客户的总数
* sql:select count (custId) from cst_custom
* jpql: select count(custId) from Customer
*/
@Test
public void testCount(){
//获取emtityManager对象
EntityManager em = JapUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.统计查询
//i.根据jpql语句创建Query查询对象
String spql = "select count (custId) from Customer";
Query query = em.createQuery(spql);//创建Query查询对象,query对象才是执行jpql的对象
//ii.对参数赋值
//iii.发送查询,并封装结果集
/**
* getResultList:直接将查询结果封装为list集合
* getSingleResult:的得到唯一的结果集
*/
Object result = query.getSingleResult();
System.out.println(result);
//4.提交事务
tx.commit();
//5.释放资源
em.close();
}
1.4 分页查询
/**
*使用jpql查询,统计客户的总数
* sql:select * from cst_customer limit ?,?
* jpql: from Customer
*/
@Test
public void testPaged(){
//获取emtityManager对象
EntityManager em = JapUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.统计查询
//i.根据jpql语句创建Query查询对象
String spql = "from Customer";
Query query = em.createQuery(spql);//创建Query查询对象,query对象才是执行jpql的对象
//ii.对参数赋值 ---分页参数
//iii.起始索引
query.setFirstResult(0);
//每页查询的条数
query.setMaxResults(3);
/**
* getResultList:直接将查询结果封装为list集合
* getSingleResult:的得到唯一的结果集
*/
List list = query.getResultList();
for (Object obj : list){
System.out.println(obj);
}
//4.提交事务
tx.commit();
//5.释放资源
em.close();
}
1.5 条件查询
/**
*使用jpql查询,统计客户的总数
* sql:select * from cst_customer where cust_name like ?;
* jpql: from Customer where custName like ?
*/
@Test
public void testCondition(){
//获取emtityManager对象
EntityManager em = JapUtils.getEntityManager();
//2.开启事务
EntityTransaction tx = em.getTransaction();
tx.begin();
//3.统计查询
//i.根据jpql语句创建Query查询对象
String spql = "from Customer where custName like ?";
Query query = em.createQuery(spql);//创建Query查询对象,query对象才是执行jpql的对象
//对参数赋值 -- 占位符参数
//从第一个参数,占位符的索引位置(从1开始,第二个参数,取值)
query.setParameter(1, "蠢逼%");
/**
* getResultList:直接将查询结果封装为list集合
* getSingleResult:的得到唯一的结果集
*/
List list = query.getResultList();
for (Object obj : list){
System.out.println(obj);
}
//4.提交事务
tx.commit();
//5.释放资源
em.close();
}