SpringDataJPA(5)jpql查询

本文详细介绍了JPQL(Java Persistence Query Language)在JPA中的应用,包括查询全部、分页、统计、条件和排序操作。通过实例展示了JPQL与SQL语句的相似性和在实体类上的操作方式,提供了完整的查询代码示例,帮助读者理解和掌握JPQL的使用。
摘要由CSDN通过智能技术生成

JPQL全称Java Persistence Query Language

这是JPA提供的复杂查询

sql:查询的是表和表中的字段
jpql:查询的是实体类和类中的属性

jpql和sql语句的语法相似

进行sql查询的步骤

1.创建query查询对象
2.对参数进行赋值
3.查询,并得到返回结果

1. 查询全部

/**
     * 查询全部
     *      jpql:from cn.yy.domain.Customer
     *      sql:select * from cst_customer
     */
    @Test
    public void testFindAll(){
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();

        //3.查询全部
        String sql = "from cn.yy.domain.Customer";//直接写Customer也可以
        Query query = entityManager.createQuery(sql);//创建Query查询对象,query对象才是执行jpql的对象
        //发送查询并封装结果集
        List list = query.getResultList();
        for(Object obj:list){
            System.out.println(obj);
        }

        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

运行结果

在这里插入图片描述

2.分页查询

/**
     * 使用jpql查询,分页查询
     *      sql:select * from cst_customer limit ?,?
     *      jpql:from Customer
     */
    @Test
    public void testPage(){
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();

        //3.查询全部
        //这里面的order by之后的内容可以修改为其他字段的
        String sql = "from Customer";//根据注解id倒序查询
        Query query = entityManager.createQuery(sql);//创建Query查询对象,query对象才是执行jpql的对象
        //对参数进行赋值:分页参数
        //起始索引
        query.setFirstResult(0);//从0开始查,不包含0
        //每页查询的条数
        query.setMaxResults(3);//每页显示两条
        //发送查询并封装结果集
        /**
         * getResultList:直接将查询结果封装为list集合
         * getSingleResult:获得唯一的结果集
         */
        List list = query.getResultList();
        for(Object obj:list){
            System.out.println(obj);
        }

        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

运行结果:

在这里插入图片描述

3.统计查询

/**
     * 使用jpql查询,查询客户的总数
     *      sql:select count(cust_id) from cst_customer
     *      jpql:select count(custId) from Customer
     */
    @Test
    public void testCount(){
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();

        //3.查询全部
        //这里面的order by之后的内容可以修改为其他字段的
        String sql = "select count(custId) from Customer";//根据注解id倒序查询
        Query query = entityManager.createQuery(sql);//创建Query查询对象,query对象才是执行jpql的对象
        //发送查询并封装结果集
        /**
         * getResultList:直接将查询结果封装为list集合
         *  getSingleResult:获得唯一的结果集
         */
        Object singleResult = query.getSingleResult();
        System.out.println(singleResult);
        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

运行结果:

在这里插入图片描述

4.条件查询

/**
     * 使用jpql查询,根据条件查询:查询industry以学开头的
     *      sql:select * from cst_customer where cust_industry like ?
     *      jpql:from Customer where custIndustry like ?
     */
    @Test
    public void testCondition(){
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();

        //3.查询全部
        //这里面的order by之后的内容可以修改为其他字段的
        String sql = "from Customer where custIndustry like ?";//根据注解id倒序查询
        Query query = entityManager.createQuery(sql);//创建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.释放资源
        entityManager.close();
    }

运行结果:

在这里插入图片描述
在这里插入图片描述

5.排序

/**
     * 排序查询:倒序查询全部客户 (根据id倒序)
     *      sql:select * from cst_customer order by cust_id DESC;
     *      jpql:from Customer order by custId desc
     */
    @Test
    public void testOrder(){
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();

        //3.查询全部
        //这里面的order by之后的内容可以修改为其他字段的
        String sql = "from Customer order by custId desc";//根据注解id倒序查询
        Query query = entityManager.createQuery(sql);//创建Query查询对象,query对象才是执行jpql的对象
        //发送查询并封装结果集
        List list = query.getResultList();
        for(Object obj:list){
            System.out.println(obj);
        }

        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值