Hibernate的查询方式
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的查询方式的更多相关文章
- Hibernate的查询方式总结
Hibernate的查询方式大体有三种,分别是HQL QBC和SQL三种.在网上查阅一一些资料,做了一个简单的总结. 1. SQL sql 是面向数据库表查询,from 后面跟的是表名,where 后 ...
- 4、Hibernate的查询方式
一.Hibernate的查询方式:OID查询 1.OID检索:Hibernate根据对象的OID(主键)进行检索 1-1.使用get方法 Customer customer = session.get ...
- Hibernate各种查询方式及查询策略(转)
转自:https://www.cnblogs.com/xujingyang/p/6734203.html 在了解Hibernate的基本知识后,重点让我们看下相关查询方式和查询优化策略吧! 话不多说, ...
- hibernate(七) hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...
- Hibernate学习(七)———— hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等 --WH 一.hibernate中的5种 ...
- Hibernate的查询方式汇总
分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要 ...
- hibernate的查询方式的介绍(一)
1.对象导航查询 2.OID查询 3.hql(hibernate query language)查询 4.QBC查询 5.本地sql查询 在这里先介绍其中两种 1.hibernate的对象导航查询 ( ...
- Hibernate主要查询方式
1.hql查询 1.1 无参数的hql查询 1.2 带参的hql查询(分为问号占位和字符占位两种) Ps: 绑定各种类型的参数时用setParameter()绑定参数,如封装方法后用不定参数时循环绑定 ...
- hibernate select查询方式总结
https://www.cnblogs.com/xingege/p/4270990.html
随机推荐
- qt+opencv LNK4272:library machine type 'x64' conflicts with target mathine type 'x86'
运行时报错如上图所示,原因是你使用的opencv库是64位的,qt里面使用的编译器MSVC是32位的,解决方法如下: 将构建套件修改位64bit:
- IDEA远程连接Hadoop
IDEA远程连接Hadoop Win 1.Hadoop配置 下载并配置到本地环境 HADOOP_HOME D:\Tools\hadoop-2.7.7\hadoop-2.7.7 HADOOP_PREFI ...
- TLS1.2 only
客户有个特殊需求,只能使用TLS1.2,其余的都不行. google了一下,发现要Enable/Disable TLS倒也不难 Windows Registry Editor Version 5.00 ...
- https://www.cnblogs.com/yudanqu/p/9467803.html
https://www.cnblogs.com/yudanqu/p/9467803.html
- Assembly Experiment4
AIMS & PREPARATIONS of THIS EXPERIMENT: SCREENSHOTS of THIS EXPERIMENT: 1. change 0403h to 0441h ...
- C++ 实数类
这是一堆我自己写完都怀疑人生的代码. 或许我见识太少了吧-- 实现一个实数类.这个类也可以看作是分数类.实现了基本的四则运算和比较.另外,与整数或小数的转换还没有实现,无限循环小数转分数也暂时没有实现 ...
- html 出现粒子线条,鼠标移动会以鼠标为中心吸附的特效之canvas-nest.js插件
我在网上看到一个很炫酷,很有趣的特效,网页上会有很多移动的粒子和线条,鼠标经过时会以鼠标为中心吸附过来,如果时间够久,会形成一个类似震动的.带辐条的车轮子的东西. 网上搜了一下,源码是github里面 ...
- spring事务详解(三)源码详解
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...
- 关于FIFO异步复位的问题
关于FIFO异步复位的问题 FIFO异步复位的宽度,需要保证至少3个较慢时钟的时钟周期长度. 怎样对一个脉冲加宽呢? `timescale 1ns / 1ps //////////////////// ...
- 一般处理程序获取get,post数据
ashx具体代码: public class GuanWangWC : IHttpHandler { public void ProcessRequest(HttpContext context) { ...