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
随机推荐
- git 入门教程
git 入门教程之协同开发 前面我们已经介绍过远程仓库的相关概念,不过那时并没有深入探讨,只是讲解了如何创建远程仓库以及推送最新工作成果到远程仓库,实际上远程仓库对于团队协同开发很重要,不仅仅是团队协 ...
- fillder抓包工具详解
https://www.cnblogs.com/yyhh/p/5140852.html
- BZOJ 4265 货币系统
今天比赛的时候做到的.题解写得很简单,但是感觉对于我这种蒟蒻还是很有思考的价值的. 题面(由于题面很短,就不概括了):小Q当上了新的宇宙大总统,他现在准备重新设计一套货币系统. 这个货币系统要求一共有 ...
- 引擎设计跟踪(九.14.3.1) deferred shading: Depthstencil as GBuffer depth
问题汇总 1.Light support for Editor编辑器加入了灯光工具, 可以添加和修改灯光. 问题1. light object的用户互交.point light可以把对应的volume ...
- 1.1.26 word内容导入PPT
1.在开始菜单栏选择[视图]>[大纲].进入大纲后,对文本设置大纲级别. 2.设置好后,在[word选项]>下拉菜单中找到[不在功能区命令]>选择[发送到PPT].
- JavaScript 版本的 RSA加密库文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- ERROR: cannot launch node of type [teleop/teleop_key]: can't locate node [teleop_key] in package [teleop]
节点由python写成,编译通过,运行时报错如下: ERROR: cannot launch node of type [teleop/teleop_key]: can't locate node [ ...
- linux与C内存管理机制
转自知乎专栏:https://zhuanlan.zhihu.com/p/51855842?utm_source=wechat_session&utm_medium=social&utm ...
- Python中的@符号
1.基本含义 @符号用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,出现在函数定义的前一行,不允许和函数定义在同一行. 一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名 ...
- python使用高阶函数计算整数阶乘
from functools import reduce num = 10 print(reduce(lambda x, y: x * y, range(1, num + 1)))