zoukankan      html  css  js  c++  java
  • Hibernate的查询方式

    Hibernate的查询的方式

        OID检索

          get或load方法进行的查询

        对象导航检索

          linkman.getCustomer();

        HQL检索

           用于接收hql语句进行查询,面向对象查询方式。

            通过session.createQuery(String hql);

              简单查询

     1 @Test
     2     public void fun1() {
     3         //获取session
     4         Session session = HibernateUtils.openSession();
     5         //打开事务
     6         Transaction tx=session.beginTransaction();
     7         //--------------------------------------
     8         //完整写法
     9         String hql1="from cn.itheima.domain.Customer";
    10         //简单写法
    11         String hql2="from Custom";
    12         //扩展写法
    13         //如果用这种写法对象是Object,接收对象List不用泛型
    14         String hql3="from java.lang.object";
    15         Query query = session.createQuery(hql1);
    16         
    17         List<Customer> list=query.list();
    18         
    19         System.out.println(list);
    20         //--------------------------------------
    21         //提交事务
    22         tx.commit();
    23         //关闭session
    24         session.close();    
    25         
    26     }
    View Code

              别名查询

             排序查询

     1 @Test
     2     //排序
     3     public void fun2() {
     4         //获取session
     5         Session session = HibernateUtils.openSession();
     6         //打开事务
     7         Transaction tx=session.beginTransaction();
     8         //--------------------------------------
     9         //完整写法
    10         String hql1="from cn.itheima.domain.Customer order by cust_id asc";
    11         String hql2="from cn.itheima.domain.Customer order by cust_id desc";
    12         Query query = session.createQuery(hql1);
    13         
    14         List<Customer> list=query.list();
    15         //query.setParameter("id", 2l);
    16         
    17         System.out.println(list);
    18         //--------------------------------------
    19         //提交事务
    20         tx.commit();
    21         //关闭session
    22         session.close();
    23         
    24     }
    View Code

             条件查询

             分组统计查询

             投影查询

     1 @Test
     2     //投影查询
     3     public void fun5() {
     4         //获取session
     5         Session session = HibernateUtils.openSession();
     6         //打开事务
     7         Transaction tx=session.beginTransaction();
     8         //--------------------------------------
     9         //完整写法
    10         String hql1="select cust_name from cn.itheima.domain.Customer ";
    11         String hql2="select cust_name,cust_id from cn.itheima.domain.Customer ";
    12         String hql3="select new Customer(cust_name,cust_id) from cn.itheima.domain.Customer ";
    13         
    14         Query query = session.createQuery(hql2); 
    15         
    16         List<Object[]> list = query.list();
    17         System.out.println(list);
    18         //--------------------------------------
    19         //提交事务
    20         tx.commit();
    21         //关闭session
    22         session.close();
    23     }
    View Code

                分页查询

     1 @Test
     2     //分页
     3     public void fun3() {
     4         //获取session
     5         Session session = HibernateUtils.openSession();
     6         //打开事务
     7         Transaction tx=session.beginTransaction();
     8         //--------------------------------------
     9         //完整写法
    10         String hql1="from cn.itheima.domain.Customer order by cust_id asc";
    11         String hql2="from cn.itheima.domain.Customer order by cust_id desc";
    12         Query query = session.createQuery(hql1);
    13         
    14         //(当前页数-1)*每页条数
    15         query.setFirstResult(0);
    16         query.setMaxResults(2);
    17         //query.setParameter("id", 2l);
    18         
    19         
    20         List<Customer> list=query.list();
    21         
    22         System.out.println(list);
    23         //--------------------------------------
    24         //提交事务
    25         tx.commit();
    26         //关闭session
    27         session.close();
    28     }
    View Code

             多表查询

        QBC检索

          用于进行条件查询(Query By Criteria),更加面向对象的方式。

          通过session.createCriteria(Class clazz);

     1 @Test
     2     //基本语法
     3     //注意此时生成ToString方法
     4     public void fun1() {
     5         //获取session
     6         Session session = HibernateUtils.openSession();
     7         //打开事务
     8         Transaction tx=session.beginTransaction();
     9         //--------------------------------------
    10         //完整写法
    11         Criteria c = session.createCriteria(Customer.class);
    12         
    13         List<Customer> list =c.list();
    14         System.out.println(list);
    15         
    16         
    17         //--------------------------------------
    18         //提交事务
    19         tx.commit();
    20         //关闭session
    21         session.close();
    22         
    23     }
    View Code

            简单查询

            排序查询

     1 @Test
     2     //排序语法
     3     public void fun4() {
     4         //获取session
     5         Session session = HibernateUtils.openSession();
     6         //打开事务
     7         Transaction tx=session.beginTransaction();
     8         //--------------------------------------
     9         //完整写法
    10         
    11         Criteria c = session.createCriteria(Customer.class);
    12         
    13         //c.addOrder(Order.asc("cust_id"));//升序
    14         c.addOrder(Order.desc("cust_id"));//降序
    15         
    16         
    17         List<Customer> list=c.list();
    18         System.out.println(list);
    19         
    20         //--------------------------------------
    21         //提交事务
    22         tx.commit();
    23         //关闭session
    24         session.close();
    25     }
    View Code

            分组统计查询

            分页查询

     1 @Test
     2     //分页语法-与HQL一样
     3     public void fun3() {
     4         //获取session
     5         Session session = HibernateUtils.openSession();
     6         //打开事务
     7         Transaction tx=session.beginTransaction();
     8         //--------------------------------------
     9         Criteria c=session.createCriteria(Customer.class);
    10         //limit  ?,?
    11         c.setFirstResult(0);
    12         c.setMaxResults(2);
    13         
    14         List<Customer> list =c.list();
    15         System.out.println(list);
    16         
    17         
    18         
    19         //--------------------------------------
    20         //提交事务
    21         tx.commit();
    22         //关闭session
    23         session.close();
    24     }
    View Code

            条件查询

            离线条件查询

     1 @Test
     2     //基本语法
     3     //注意此时生成ToString方法
     4     public void fun1() {
     5         //service/web层
     6         DetachedCriteria dc=DetachedCriteria.forClass(Customer.class);
     7         
     8         dc.add(Restrictions.idEq(61));//瓶装条件(全部与普通Criteria一致)
     9         //获取session
    10         Session session = HibernateUtils.openSession();
    11         //打开事务
    12         Transaction tx=session.beginTransaction();
    13         //--------------------------------------
    14         Criteria c=dc.getExecutableCriteria(session);
    15         List list=c.list();
    16         System.out.println(list);
    17         
    18         
    19         
    20         //--------------------------------------
    21         //提交事务
    22         tx.commit();
    23         //关闭session
    24         session.close();
    25 
    26         
    27     }
    View Code

         SQL检索

          用于接收sql进行查询。

          通过session.createSQLQuery(String sql);

    Hibernate的抓取策略(优化)

        延迟加载

          类级别             在<class>上配置lazy属性

          关联级别        在<set>、<many-to-one>上配置的lazy属性

        

        抓取策略

          Set上的fetch和lazy

            fetch   :     

              select

               join

              subselect

            lazy           :

              true

              false

              extra

          many-to-one上fetch和lazy

            fetch

            select

            join

           lazy

            proxy

            false

            no-proxy

      结论:为了提高效率.fetch的选择上应选择select. lazy的取值应选择 true. 全部使用默认值.

  • 相关阅读:
    MySQL系列(二)--数据类型
    并发和多线程(十)--锁状态概念
    并发和多线程(九)--并发容器J.U.C和lock简介
    并发和多线程(八)--线程安全、synchronized、CAS简介
    Nuxt 2.3.X 配置babel
    Nuxt 2.3.X 配置sass
    vscode写vue模板--代码片段
    ES6和ES5中的this指向问题
    TypeScript -- JavaScript的救赎
    Pycharm 查看一个类的继承关系图
  • 原文地址:https://www.cnblogs.com/money131/p/10691708.html
Copyright © 2011-2022 走看看