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
随机推荐
- Web前端学习第二天(cookie 一)
CookIe安全 cookie一个神奇的机制,无论什么请求中都会带有cookie字段. 可以通过服务器响应头的Set-Cookie字段添加,修改和删除,大多数情况下,客户端通过JavaScript也可 ...
- 单线拨号上网时RouterOS内网端口映射的配置
很多时候routeros 是通过单线拨号上网,假设PPP接口名为pppoe-out1 若需要添加内网ip=18.16.1.92主机的3389端口映射 ,可以在命令行键入: ip firewall na ...
- 浅谈C#语言中的各种数据类型,与数据类型之间的转换
什么是数据类型? 数据类型,百度百科是这样解释的:数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作.这样的解释对于一个初学者来说未必太过于深奥. 简单点说,数据类型就是不同长度的 ...
- c# 公元转农历
void Main() { ,,); GetLunarDisplay(date).Dump(); } public List<string> GetLunarYearList() { va ...
- js求两个数组的交集|并集|差集|去重
let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合) a-b = [1,3] (b-a 差集:属于b但不属于a的集合) b-a = [4 ...
- 面试题-linux基础
Linux基础和git linux的基础命令(怎么区分一个文件还是文件夹) ls -F 在显示名称的时候会在文件夹后面添加“/”, 在文件后面加“*” 日志以什么格式,存放在哪里?日志可以存储在“/ ...
- docker mysql8 注意
1. mysql8 出了有段时间了,但公司项目的django还不支持mysql8的默认加密方式. 连接时报错 Error : The server requested authentication m ...
- 【原创】Bug管理操作规范个人经验总结
1. 禅道简介 禅道是一个基于“敏捷开发”模式的软件开发全生命周期管理软件,在国内的软件开发公司里占据最大的份额,从大公司到小公司,都能适用. 笔者使用禅道多年,根据自己的经验总结了一套Bug管理的方 ...
- C# Json 和对象的相互转换
Json 和对象的相互转换 /// <summary> /// Json 和对象的相互转换 ——需引用using Newtonsoft.Json; 即:Jsonnet.net..... / ...
- js无间隙向上滚动
一.优点:div可以load:缺点:滚动的时候有点娘,磨磨唧唧,不够干脆爽快 html <div id="my_msg" class="my-msg bg-whit ...