当前位置 > it书童 > java > 正文

使用Jpql实现在JPA中的复杂查询

java it书童 2020-11-19 09:45:02 0赞 0踩 128阅读 0评论

JPQL全称Java Persistence Query Language

基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象的表达式,将SQL语法和简单查询语义绑定在一起

使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。

其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。

查询全部

@Test
public void testFindAll() {
    // 创建实体管理类
    EntityManager em = JpaUtils.getEntityManager();
    // 获取事务对象
    EntityTransaction tx = em.getTransaction();
    // 开启事务
    tx.begin();
    // 查询全部
    String jpql = "from Customer";
    Query query = em.createQuery(jpql);
    List list = query.getResultList();
    for (Object obj : list) {
        System.out.println(obj);
    }
    // 提交事务
    tx.commit();
    // 释放资源
    em.close();
}

排序

@Test
public void testOrders() {
    EntityManager entityManager = JpaUtils.getEntityManager();
    EntityTransaction tx = entityManager.getTransaction();
    tx.begin();
    String jpql = "from Customer order by custId desc";
    Query query = entityManager.createQuery(jpql);
    List list = query.getResultList();
    for (Object obj : list) {
        System.out.println(obj);
    }
    tx.commit();
    entityManager.close();
}

统计条数

@Test
public void testCount() {
    EntityManager entityManager = JpaUtils.getEntityManager();
    EntityTransaction tx = entityManager.getTransaction();
    tx.begin();
    String jpql = "select count(custId) from Customer";
    Query query = entityManager.createQuery(jpql);
    Object result = query.getSingleResult();
    System.out.println(result);
    tx.commit();
    entityManager.close();
}

分页

@Test
public void testPaged() {
    EntityManager entityManager = JpaUtils.getEntityManager();
    EntityTransaction tx = entityManager.getTransaction();
    tx.begin();
    String jpql = "from Customer";
    Query query = entityManager.createQuery(jpql);
    // 超始索引
    query.setFirstResult(0);
    // 每页条数
    query.setMaxResults(2);
    List resultList = query.getResultList();
    for (Object o : resultList) {
        System.out.println(o);
    }
    tx.commit();
    entityManager.close();
}

条件查询

@Test
public void testCondition() {
    EntityManager entityManager = JpaUtils.getEntityManager();
    EntityTransaction tx = entityManager.getTransaction();
    tx.begin();
    String jpql = "from Customer where custName like ? ";
    Query query = entityManager.createQuery(jpql);
    query.setParameter(1, "%卡罗%");
    List resultList = query.getResultList();
    for (Object o : resultList) {
        System.out.println(o);
    }
    tx.commit();
    entityManager.close();
}

源码 javaDemo 52a3519

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/829