zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    工厂方法
    简单工厂
    单例模式
    MVC中Cookies的简单读写操作
    windows服务开启(收藏url)
    WCF的三种模式
    SvcUtil.exe导入WCF
    简述wcf应用
    sql的几种常用锁简述
    Lucene.Net和盘古分词应用
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7856714.html
Copyright © 2011-2022 走看看