zoukankan      html  css  js  c++  java
  • hibernate_05_hibernateHQL查询QBC查询和SQL查询

    1.HQL简介:HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。

    HQL的基本语法:

    public class HQLTest {
    
        @Test
        /**
         * HQL无条件查询
         */
        public void select() {
      
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            List<Customer> list = session.createQuery(" from Customer").list();
    
            list.forEach(System.out::println);
    
            tx.commit();
        }
    
        @Test
        /**
         * HQL别名查询
         */
        public void select2() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            List<Customer> list = session.createQuery("select c from Customer c").list();
    
            list.forEach(System.out::println);
    
            tx.commit();
        }
    
        @Test
        /**
         * HQL排序查询
         */
        public void sort() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            List<LinkMan> list = session.createQuery(" from LinkMan order by lkm_id desc").list();
    
            list.forEach(System.out::println);
    
            tx.commit();
    
        }
    
        @Test
        /**
         * HQL 多条件查询
         */
        public void conditionSelect() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            //按位置绑定
            /*Query query = session.createQuery(" from LinkMan where lkm_id=? and lkm_phone=?");
            query.setParameter(0,20L);
            query.setParameter(1,"2");
            List<LinkMan> list = query.list();*/
    
    
            //按名称绑定
            Query query = session.createQuery(" from LinkMan where lkm_id= :a and lkm_phone= :b");
            query.setParameter("a", 20L);
            query.setParameter("b", "2");
            List<LinkMan> list = query.list();
    
            list.forEach(System.out::println);
    
            tx.commit();
    
        }
    
    
        @Test
        /**
         * HQL投影查询 查询部分字段
         */
        public void select3() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            //查询一个字段
            //List<Object> list = session.createQuery(" select l.lkm_id from LinkMan l").list();
    
            //查询多个字段
            //List<Object[]> list = session.createQuery(" select l.lkm_id,l.lkm_name from LinkMan l").list();
    
            //查询多个属性,分装到对象中去 需要有参构造方法
            List<LinkMan> list = session.createQuery(" select new LinkMan(lkm_id,lkm_name) from LinkMan").list();
    
            list.forEach(System.out::println);
    
            tx.commit();
    
        }
    
        @Test
        /**
         * HQL分页查询
         */
        public void limiter() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            Query query = session.createQuery(" from LinkMan ");
            query.setFirstResult(0);
            query.setMaxResults(10);
            List<LinkMan> list =  query.list();
    
            list.forEach(System.out::println);
    
            tx.commit();
        }
    
        @Test
        /**
         * HQL分组统计查询
         */
        public void count() {
    
            //聚合函数的使用:count(),max(),avg(),,sum();
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            //统计查询
            //Object uniqueResult = session.createQuery(" select count(*) from LinkMan ").uniqueResult();
    
            //分组统计查询
            List list = session.createQuery(" select lkm_name,count(*) from LinkMan group by lkm_phone having count(*)>=2").list();
    
            list.forEach(System.out::println);
    
            tx.commit();
        }
    }                            

    HQL的多表查询

     

    @Test
        /**
         * HQL的多表查询
         */
        public void select4() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            //HQL:内连接  得到的是一个List<Obcect[]>
            //List list = session.createQuery("from Customer c join c.linkMans").list();
    
            //HQL:迫切内连接  得到的是一个List<Customer>  就是吧得到的两个表的数据分装到一个对象中去
            List<Customer> list = session.createQuery("from Customer c join fetch c.linkMans").list();
    
            list.forEach(System.out::println);
    
    
            tx.commit();
    
        }

    2.QBC简介:QBC(Query By Criteria) API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expresson类组成,它支持在运行时动态生成查询语句。

      1>调用Session的createCriteria()方法创建一个Criteria对象。
      2>设定查询条件。Restrictions类提供了一系列用于设定查询条件的静态方法,
      这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
      Criteria的add()方法用于加入查询条件。
      3>调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
      List集合中存放了符合查询条件的持久化对象。
    QBC的基本语法:
     @Test
        /**
         * QBC查询所有
         */
        public void selectAll() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            Criteria criteria = session.createCriteria(LinkMan.class);
            List list = criteria.list();
    
            list.forEach(System.out::println);
            tx.commit();
    
        }
    
        @Test
        /**
         * QBC多条件查询
         *  =    eq
         *  >    gt
         *  >=   ge
         *  <    lt
         *  <=   le
         *  <>   ne
         *  like
         *  in
         *  and
         *  or
         */
        public void select2() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            Criteria criteria = session.createCriteria(LinkMan.class);
            criteria.add(Restrictions.eq("lkm_phone","1"));
            criteria.add(Restrictions.like("lkm_name","%1"));
            List list = criteria.list();
    
            list.forEach(System.out::println);
            tx.commit();
    
        }
    
        @Test
        /**
         * 离线条件查询
         */
        public void detachedSelect() {
    
            //在service层将多条件查询分装好 直接传入dao层进行查询
    
            //service层
            DetachedCriteria detachedCriteria = DetachedCriteria.forClass(LinkMan.class);
            detachedCriteria.add(Restrictions.like("lkm_name","%1"));
    
            //dao层
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            Criteria criteria = detachedCriteria.getExecutableCriteria(session);
            List list = criteria.list();
    
            list.forEach(System.out::println);
    
    
        }
    
        @Test
        /**
         * QBC分页查询
         */
        public void pagingSelect() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            Criteria criteria = session.createCriteria(LinkMan.class);
            criteria.setFirstResult(0);
            criteria.setMaxResults(10);
            List list = criteria.list();
    
            list.forEach(System.out::println);
            tx.commit();
    
        }
    
        @Test
        /**
         * QBC排序
         */
        public void sort() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
    
            Criteria criteria = session.createCriteria(LinkMan.class);
            List list = criteria.addOrder(Order.desc("lkm_id")).list();
    
            list.forEach(System.out::println);
            tx.commit();
    
        }

     3.HQL查询

     

    @Test
        public void select() {
    
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            //addEntity()将查询到的数据分装到一个实体中去
            List<Object> list = session.createSQLQuery("select * from cst_customer").addEntity(Customer.class).list();
    
            list.forEach(System.out::println);
            tx.commit();
    
        }                                       
  • 相关阅读:
    SQL字段排序
    delphi MessageBox 用法
    delphi获取当前计算机所有盘符
    PHP限制IP
    delphi 显示数据
    GUI模块分解与开发征集
    delphi 用户登录 代码
    Hello China GUI模块鼠标指针的实现
    DELPHI 托盘 实例
    delphi 内存流 操作
  • 原文地址:https://www.cnblogs.com/asndxj/p/12069326.html
Copyright © 2011-2022 走看看