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. 设计模式—模板方法(template method)

    一.定义 百度百科给的定义:定义一个操作中的算法骨架(稳定),而将一些步骤延迟到子类中(变化).Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 如何做到 ...

  2. QC3.0充电标准

  3. PL/SQL连接远程服务器数据库,出现ORA-12154: TNS: 无法解析指定的连接标识符。

    故障环境:上礼拜新装了一台服务器(win server2008r2),并在服务器上安装了ORACLE 11g database.且已经做好监听配置,开通了1521端口. 我又在局域网内另一台pc端装了 ...

  4. 改变一下主要发博的方向吧...转scratch!

    因为expression2实在是没什么好说的,BUI,水滴鱼大佬还有其他贴吧上的大佬,实在是多得不行,我一个小人物也说不了什么,然而scratch我却可以多发发脚本,思路,美工啊等等.所以以后我就主要 ...

  5. Java 调用 Shell 命令

    近日项目中有这样一个需求:系统中的外币资金调度完成以后,要将调度信息生成一个Txt文件,然后将这个Txt文件发送到另外一个系统(Kondor)中.生成文件自然使用OutputStreamWirter了 ...

  6. mysql的事务和数据库锁的关系

    数据库加事务并不是数据就安全来了,事务和锁要分析清楚和配合使用 问题背景处于对高并发的秒杀环节的理解整理如下: 秒杀的时候高并发主要注意1.在秒杀的情况下,肯定不能如此高频率的去读写数据库,会严重造成 ...

  7. c标签 多个条件

    <c:if test="${(rwyy01.yyry==NULL || rwyy01.yyry=='') && (rwyy01.shry==NULL || rwyy01 ...

  8. python selenium-webdriver 执行js (八)

    使用python selenium 做自动化测试的时候其实我基本没有使用过执行js,只是在后来使用selenium来爬虫的时候使用到了,所以我在这里也就拿出来简单的介绍一下如何执行js. execut ...

  9. SqlServer :实现树形结构递归查询(无限极分类)

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一 ...

  10. pagination.js 使用

    pagination.js 使用方式 $('.paginationjs').pagination({ dataSource: 'DetailImage?handler=Search', locator ...