Hibernate_day04--HQL查询

HQL查询

1 hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性

2 常用的hql语句

(1)查询所有: from 实体类名称

(2)条件查询: from 实体类名称 where 属性名称=?

(3)排序查询: from 实体类名称 order by 实体类属性名称 asc/desc

3 使用hql查询操作时候,使用Query对象

(1)创建Query对象,写hql语句

(2)调用query对象里面的方法得到结果

查询所有

1 查询所有客户记录

(1)创建Query对象,写hql语句

(2)调用query对象里面的方法得到结果

2 查询所有: from 实体类名称

具体:

//演示查询所有
    @Test
    public void testSelect1() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try {
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();
            //1 创建query对象
            Query query = session.createQuery("from Customer");
            //2 调用方法得到结果
            List<Customer> list = query.list();
            for (Customer customer : list) {
    System.out.println(customer.getCid()+"::"+customer.getCustName());
            }
            tx.commit();
        }catch(Exception e) {
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

条件查询

1 hql条件查询语句写法:

(1)  from  实体类名称 where 实体类属性名称=? and实体类属性名称=?

from  实体类名称 where 实体类属性名称 like ?

2 代码

            //1 创建query对象
            //SELECT * FROM t_customer WHERE cid=? AND custName=?
            Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?");
            /**
             *2 设置条件值
             *    向?里面设置值
             *    setParameter方法两个参数
             *        第一个参数:int类型是?位置,?位置从零开始
             *        第二个参数:具体参数值 
             */
            //设置第一个?值
            query.setParameter(0, 1);
            //设置第二个?值
            query.setParameter(1, "小李");
            //3 调用方法得到结果
            List<Customer> list= query.list();
            for(Customer customer : list) {
                System.out.println(customer.getCid() + ":" + customer.getCustName());
            }

模糊查询

            //1 创建query对象
            //SELECT * FROM Customer c c.custName LIKE '%新浪%'
            Query query = session.createQuery("from Customer c where c.custName like ?");
            //2 设置?的值
            // %浪%
            query.setParameter(0, "%浪%");
            //3 调用方法得到结果
            List<Customer> list= query.list();
            for (Customer customer : list) {
                System.out.println(customer.getCid() + ":"+ customer.getCustName());
            }

排序查询

1 hql排序语句写法

(1)from 实体类名称 order by 实体类属性名称 asc/desc

        //1 创建query对象
        //SELECT * FROM t_customer ORDER BY cid ASC
        Query query = session.createQuery("from Customer c order by cid asc");
        //2 调用方法得到结果
        List<Customer> list= query.list();
        for (Customer customer : list) {
            System.out.println(customer.getCid() + ":"+ customer.getCustName());
        }

分页查询

1 mysql实现分页

(1)使用关键字 limit实现

0表示从0开始,3表示每页显示3条记录

2 在hql中实现分页

(1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作

        //1 创建query对象
        //写查询所有的语句
        Query query = session.createQuery("from Customer");
        //2 设置分页数据
        //2.1设置开始位置
        query.setFirstResult(0);
        //2.2设置每页记录数
        query.setMaxResults(3);
        //3 调用方法得到结果
        List<Customer> list = query.list();
        for (Customer customer : list) {
            System.out.println(customer.getCid() + ":"+ customer.getCustName());
        }

投影查询

1 投影查询:查询不是所有字段值,而是部分字段的值

2 投影查询hql语句写法:

(1)select 实体类属性名称1, 实体类属性名称2  from 实体类名称

(2)select 后面不能写 * ,不支持的

3 具体实现

        //1 创建query对象
        Query query = session.createQuery("select custName from Customer");
        //2 调用方法得到结果
        List<Object> list = query.list();
        for (Object object : list) {
            System.out.println(object);
        }

聚集函数使用

1 常用的聚集函数

(1)count、sum、avg、max、min

2 hql聚集函数语句写法

(1)查询表记录数

- select count(*) from 实体类名称

        //1 创建query对象
        Query query = session.createQuery("select count(*) from Customer");
        //2 调用方法得到结果
        //query对象里面有方法,直接返回对象形式
        Object obj = query.uniqueResult();
//返回int类型
//        int count = (int) obj;
        //首先把object变成long类型,再变成int类型
        Long lobj = (Long) obj;
        int count = lobj.intValue();
        System.out.println(count);

原文地址:https://www.cnblogs.com/justdoitba/p/7856714.html