JPA 中的复杂查询

本贴最后更新于 1577 天前,其中的信息可能已经时移世异

JPQL 全称 Java Persistence Query Language

基于首次在 EJB2.0 中引入的 EJB 查询语言(EJB QL),Java 持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将 SQL 语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的 SQL。
其特征与原生 SQL 语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。

1.

//查询所有客户

 @Test

 **public**  **void** findAll() {

EntityManager em = **null**;

EntityTransaction tx = **null**;

 **try** {

	 //获取实体管理对象
	
	 em = JPAUtil.getEntityManager();
	
	 //获取事务对象
	
	 tx = em.getTransaction();
	
	 tx.begin();
	
	 // 创建query对象
	
	String jpql = "from Customer";
	
	Query query = em.createQuery(jpql);
	
	 // 查询并得到返回结果
	
	List list = query.getResultList(); // 得到集合返回类型
	
	 **for** (Object object : list) {
	
	 System.out.println(object);

 }

 tx.commit();

} **catch** (Exception e) {

 // 回滚事务

 tx.rollback();

 e.printStackTrace();

} **finally** {

 // 释放资源

 em.close();

 }

 }

2.分页查询客户



 @Test

 **public**  **void** findPaged () {

EntityManager em = **null**;

EntityTransaction tx = **null**;

 **try** {

 //获取实体管理对象
	em = JPAUtil.getEntityManager();

 //获取事务对象

	 tx = em.getTransaction();

	 tx.begin();

 

	 //创建query对象
	
	String jpql = "from Customer";
	
	Query query = em.createQuery(jpql);
	
	 //起始索引
	
	 query.setFirstResult(0);
	
	 //每页显示条数
	
	 query.setMaxResults(2);
	
	 //查询并得到返回结果
	
	List list = query.getResultList(); //得到集合返回类型

 	for (Object object : list) {

	  System.out.println(object);

 }

	 tx.commit();

} **catch** (Exception e) {

 // 回滚事务

	 tx.rollback();
	
	 e.printStackTrace();

} **finally** {

 // 释放资源

	 em.close();

 }

 }

3.条件查询

//条件查询

 @Test

 **public**  **void** findCondition () {

	EntityManager em = **null**;
	
	EntityTransaction tx = **null**;
	
	 **try** {
	
	 //获取实体管理对象
	
	 em = JPAUtil.getEntityManager();
	
	 //获取事务对象
	
	 tx = em.getTransaction();
	
	 tx.begin();
	//创建query对象
	
	String jpql = "from Customer where custName like ? ";
	
	Query query = em.createQuery(jpql);
	
	 //对占位符赋值,从1开始
	
	 query.setParameter(1, "huanyuan%");
	
	 //查询并得到返回结果
	
	Object object = query.getSingleResult(); //得到唯一的结果集对象
	
	 System.out.println(object);
	
	 tx.commit();
	
	} **catch** (Exception e) {
	
	 // 回滚事务
	
	 tx.rollback();
	
	 e.printStackTrace();
	
	} **finally** {
	
	 // 释放资源
	
	 em.close();
	
	 }

 }

4.

//根据客户id倒序查询所有客户

 //查询所有客户

 @Test

 **public**  **void** testOrder() {

	EntityManager em = **null**;
	
	EntityTransaction tx = **null**;
	
	 **try** {
	
	 //获取实体管理对象
	
	 em = JPAUtil.getEntityManager();
	
	 //获取事务对象
	
	 tx = em.getTransaction();
	
	 tx.begin();
	
	 // 创建query对象
	
	String jpql = "from Customer order by custId desc";
	
	Query query = em.createQuery(jpql);
	
	 // 查询并得到返回结果
	
	List list = query.getResultList(); // 得到集合返回类型
	
	 **for** (Object object : list) {
	
	 System.***out***.println(object);
	
	 }
	
	 tx.commit();

} **catch** (Exception e) {
	 // 回滚事务
	
	 tx.rollback();
	
	 e.printStackTrace();

} **finally** {

 // 释放资源

	 em.close();

 }

 }

5. 统计查询

//统计查询

 @Test

 **public**  **void** findCount() {

	EntityManager em = **null**;
	
	EntityTransaction tx = **null**;

 **try** {

	 //获取实体管理对象
	
	 em = JPAUtil.getEntityManager();
	
	 //获取事务对象
	
	 tx = em.getTransaction();
	
	 tx.begin();
	
	 // 查询全部客户
	
	 // 1.创建query对象
	
	String jpql = "select count(custId) from Customer";
	
	Query query = em.createQuery(jpql);
	
	 // 2.查询并得到返回结果
	
	Object count = query.getSingleResult(); // 得到集合返回类型
	
	 System.***out***.println(count);
	
	 tx.commit();

} **catch** (Exception e) {

 // 回滚事务

	 tx.rollback();
	
	 e.printStackTrace();

} **finally** {

 // 释放资源

	 em.close();

 }

 }

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...