JPA(6)之使用JPQL完成复杂查询

JPA(6)之使用JPQL完成复杂查询

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

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

查询全部

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

分页查询

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

条件查询

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, "阿里%");
    //查询并得到返回结果
    Object object = query.getSingleResult(); //得到唯一的结果集对象
    System.out.println(object);
    tx.commit();
} catch (Exception e) {
    // 回滚事务
    tx.rollback();
    e.printStackTrace();
} finally {
    // 释放资源
    em.close();
}

排序查询

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

统计查询

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

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/jpa6.html

Buy me a cup of coffee ☕.