Hibernate的查询的方式

    OID检索

      get或load方法进行的查询

    对象导航检索

      linkman.getCustomer();

    HQL检索

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

      通过session.createQuery(String hql);

         简单查询

 @Test
public void fun1() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
//完整写法
String hql1="from cn.itheima.domain.Customer";
//简单写法
String hql2="from Custom";
//扩展写法
//如果用这种写法对象是Object,接收对象List不用泛型
String hql3="from java.lang.object";
Query query = session.createQuery(hql1); List<Customer> list=query.list(); System.out.println(list);
//--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close(); }

         别名查询

         排序查询

 @Test
//排序
public void fun2() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
//完整写法
String hql1="from cn.itheima.domain.Customer order by cust_id asc";
String hql2="from cn.itheima.domain.Customer order by cust_id desc";
Query query = session.createQuery(hql1); List<Customer> list=query.list();
//query.setParameter("id", 2l); System.out.println(list);
//--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close(); }

         条件查询

         分组统计查询

         投影查询

 @Test
//投影查询
public void fun5() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
//完整写法
String hql1="select cust_name from cn.itheima.domain.Customer ";
String hql2="select cust_name,cust_id from cn.itheima.domain.Customer ";
String hql3="select new Customer(cust_name,cust_id) from cn.itheima.domain.Customer "; Query query = session.createQuery(hql2); List<Object[]> list = query.list();
System.out.println(list);
//--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close();
}

           分页查询

 @Test
//分页
public void fun3() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
//完整写法
String hql1="from cn.itheima.domain.Customer order by cust_id asc";
String hql2="from cn.itheima.domain.Customer order by cust_id desc";
Query query = session.createQuery(hql1); //(当前页数-1)*每页条数
query.setFirstResult(0);
query.setMaxResults(2);
//query.setParameter("id", 2l); List<Customer> list=query.list(); System.out.println(list);
//--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close();
}

         多表查询

    QBC检索

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

      通过session.createCriteria(Class clazz);

 @Test
//基本语法
//注意此时生成ToString方法
public void fun1() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
//完整写法
Criteria c = session.createCriteria(Customer.class); List<Customer> list =c.list();
System.out.println(list); //--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close(); }

        简单查询

        排序查询

 @Test
//排序语法
public void fun4() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
//完整写法 Criteria c = session.createCriteria(Customer.class); //c.addOrder(Order.asc("cust_id"));//升序
c.addOrder(Order.desc("cust_id"));//降序 List<Customer> list=c.list();
System.out.println(list); //--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close();
}

        分组统计查询

        分页查询

 @Test
//分页语法-与HQL一样
public void fun3() {
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
Criteria c=session.createCriteria(Customer.class);
//limit ?,?
c.setFirstResult(0);
c.setMaxResults(2); List<Customer> list =c.list();
System.out.println(list); //--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close();
}

        条件查询

        离线条件查询

 @Test
//基本语法
//注意此时生成ToString方法
public void fun1() {
//service/web层
DetachedCriteria dc=DetachedCriteria.forClass(Customer.class); dc.add(Restrictions.idEq(61));//瓶装条件(全部与普通Criteria一致)
//获取session
Session session = HibernateUtils.openSession();
//打开事务
Transaction tx=session.beginTransaction();
//--------------------------------------
Criteria c=dc.getExecutableCriteria(session);
List list=c.list();
System.out.println(list); //--------------------------------------
//提交事务
tx.commit();
//关闭session
session.close(); }

     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. 全部使用默认值.

Hibernate的查询方式的更多相关文章

  1. Hibernate的查询方式总结

    Hibernate的查询方式大体有三种,分别是HQL QBC和SQL三种.在网上查阅一一些资料,做了一个简单的总结. 1. SQL sql 是面向数据库表查询,from 后面跟的是表名,where 后 ...

  2. 4、Hibernate的查询方式

    一.Hibernate的查询方式:OID查询 1.OID检索:Hibernate根据对象的OID(主键)进行检索 1-1.使用get方法 Customer customer = session.get ...

  3. Hibernate各种查询方式及查询策略(转)

    转自:https://www.cnblogs.com/xujingyang/p/6734203.html 在了解Hibernate的基本知识后,重点让我们看下相关查询方式和查询优化策略吧! 话不多说, ...

  4. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

  5. Hibernate学习(七)———— hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等 --WH 一.hibernate中的5种 ...

  6. Hibernate的查询方式汇总

    分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要 ...

  7. hibernate的查询方式的介绍(一)

    1.对象导航查询 2.OID查询 3.hql(hibernate query language)查询 4.QBC查询 5.本地sql查询 在这里先介绍其中两种 1.hibernate的对象导航查询 ( ...

  8. Hibernate主要查询方式

    1.hql查询 1.1 无参数的hql查询 1.2 带参的hql查询(分为问号占位和字符占位两种) Ps: 绑定各种类型的参数时用setParameter()绑定参数,如封装方法后用不定参数时循环绑定 ...

  9. hibernate select查询方式总结

    https://www.cnblogs.com/xingege/p/4270990.html

随机推荐

  1. qt+opencv LNK4272:library machine type 'x64' conflicts with target mathine type 'x86'

    运行时报错如上图所示,原因是你使用的opencv库是64位的,qt里面使用的编译器MSVC是32位的,解决方法如下: 将构建套件修改位64bit:

  2. IDEA远程连接Hadoop

    IDEA远程连接Hadoop Win 1.Hadoop配置 下载并配置到本地环境 HADOOP_HOME D:\Tools\hadoop-2.7.7\hadoop-2.7.7 HADOOP_PREFI ...

  3. TLS1.2 only

    客户有个特殊需求,只能使用TLS1.2,其余的都不行. google了一下,发现要Enable/Disable TLS倒也不难 Windows Registry Editor Version 5.00 ...

  4. https://www.cnblogs.com/yudanqu/p/9467803.html

    https://www.cnblogs.com/yudanqu/p/9467803.html

  5. Assembly Experiment4

    AIMS & PREPARATIONS of THIS EXPERIMENT: SCREENSHOTS of THIS EXPERIMENT: 1. change 0403h to 0441h ...

  6. C++ 实数类

    这是一堆我自己写完都怀疑人生的代码. 或许我见识太少了吧-- 实现一个实数类.这个类也可以看作是分数类.实现了基本的四则运算和比较.另外,与整数或小数的转换还没有实现,无限循环小数转分数也暂时没有实现 ...

  7. html 出现粒子线条,鼠标移动会以鼠标为中心吸附的特效之canvas-nest.js插件

    我在网上看到一个很炫酷,很有趣的特效,网页上会有很多移动的粒子和线条,鼠标经过时会以鼠标为中心吸附过来,如果时间够久,会形成一个类似震动的.带辐条的车轮子的东西. 网上搜了一下,源码是github里面 ...

  8. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  9. 关于FIFO异步复位的问题

    关于FIFO异步复位的问题 FIFO异步复位的宽度,需要保证至少3个较慢时钟的时钟周期长度. 怎样对一个脉冲加宽呢? `timescale 1ns / 1ps //////////////////// ...

  10. 一般处理程序获取get,post数据

    ashx具体代码: public class GuanWangWC : IHttpHandler { public void ProcessRequest(HttpContext context) { ...