JPA 中的复杂查询

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

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(); } }

相关帖子

欢迎来到这里!

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

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