Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询
SQL的执行顺序:
1.From
2.Where 过滤基础数据
where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数
3.Group by
4.Select
5.Having
6.Order by
使用Hibernate查询时,使用hibernate的一个接口query
Hql是面向对象的查询语句,所以跟的是类名
Query query = session.createQuery(“select id,name,stu.cla.name from Student”);
List<Object[]> list = query.list();
For(Object[] obj : list){
........打印等
Obj[0] = id; Obj[1] = name; Obj[2] = stu.cla.name ;
}
查询后的数据存在一个Object数组里面
---------------------------------------------------------------------------------------------------------------------------------
list得到查询
List<List> list = = session.createQuery(“select new List(id,name,stu.cla.name) from Student”).list();
For(List list1 : list){
System.out.print(list1.get(0) + list1.get(1));
}
---------------------------------------------------------------------------------------------------------------------------------
Java对象查询 需要一个带参数的构造函数
创建一个中间类,包括所需要的属性等 new 对象:包名.类名
List<MyData> list = session.createQuery(“select new com.lovo.my.MyData(id,name,classname) from MyData”).list();
For(MyData data: list){
System.out.print(data.id + “ ” + data.name + “ ” + data.classname);
}
---------------------------------------------------------------------------------------------------------------------------------
Map得到查询
List<Map> list = = session.createQuery(“select new map(name as stuname,stu.cla.name as claname) from Student”).list();
For(Map map : list){
System.out.print(map.get(“stuname”) +” ” + map.get(“classname”));
}
---------------------------------------------------------------------------------------------------------------------------------
知道查询的结构是一个对象,获得一个结果集
Student stu = (Student)session.createQuery(“from Student where id=2”).uniqueResult();
(懒加载)有关联时: 当清除session后,会报懒加载错误
System.out.print(stu.getName()+” ” + stu.getCla().getName());
开启懒加载:1.配置中设置 lazy=”false” 2.在session关闭前,初始化 hibernate.initialize()
内连接:匹配才连接,不匹配不连接,会导致数据的丢失
Dto:数据持久化
单例模式:例如:private HibernateUtil(){} 不能new
Hibernate占位符:1.id= :id(命名参数) 2.id=?
Group by 投影有限制:1.group by之后的能投影 2.聚合函数
Round(需要取整的函数,保留几位小数)
IfNull(判断的数据,0);---如果数据为空,则用0代替
HQL中只能在Where / select 中使用子查询
用本地SQL/HQL语句:
Select name from t_student; Select id from t_student;
返回一列数据:用string接受 用Integer接受
session.createSQLQuery(Select * from t_student).addScalar(“name”).list();
在SQL语句中有标量,*则没有效果
session.createSQLQuery(Select * from t_student).addEnitity(Student.class).list();
把查询到的所有数据存储到Student对象中
Hibernate就是对JDBC的封装 :对数据库访问效率的降低和性能的下降(针对这个生成了缓存 ---- 内存中) 位于数据库和数据库访问层中
一级缓存:Session 缓存
Session.clear();-----清除session,缓存中的所有数据全部清除
lazy(懒加载)有懒加载:
1.需要什么数据则发送什么SQL语句
2.关闭懒加载:把所有的关联表全部用一条SQL语句连接,对象过多保存在内存中
3.关闭session时,懒加载也关闭
4.默认懒加载开启
抓取策略:
Session关闭后,立即抓取数据-----把所有的数据抓取到数据库中
From Student stu left join fetch stu,myclass where stu.id = 1;
二级缓存:用第三方jar包 sessionFactory级别
在hibernate配置下:
<!--查询缓存-->
<property name="cache.use_query_cache">true</property>
<!--开启二级缓存-->
<property name="cache.use_second_level_cache">true</property>
<!--配置echche的实现类-->
<property name="cache.region.factory_class">
org.hibernate.cache.EhCacheRegionFactory
</property>
Hibernate悲观和乐观锁:控制数据在操作时,不会被外界所破坏
悲观锁:锁表的状态 setLockMode(对象,LockMode.UPGPADE) 依赖数据库的锁表机制,t提交后才释放
乐观锁:主要采用版本的形式
配置:
1.创建类时,添加一个属性version int
2.Version必须配置在id的后面 <version name=”version” column=”version”></version>
Gson gson = new Gson();
String list = gson.toJson();
打成jar包:
1.file--export
2.输入jar --- jarfile
3.选择想要打的jar包 写入jar包名称 选择保存路径
Hibernate中的HQL查询与缓存机制的更多相关文章
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- 分享知识-快乐自己:Hibernate 中Criteria Query查询详解
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...
- Hibernate中的HQL语言
一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...
- Hibernate-ORM:15.Hibernate中的Criteria查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲师Hibernate中的Criteria查询! 一,Criteria简介: 刚接触Hibernate ...
- Hibernate-ORM:13.Hibernate中的连接查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将会解释Hibernate中的连接查询(各种join) 一,目录 1.内链接 1.1显式内连接(inn ...
- Hibernate-ORM:08.Hibernate中的投影查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将叙述hibernate中的投影查询 一,目录: 1.解释什么是投影查询 2.返回Object单个对象 ...
- 关于RecyclerView中Viewholder和View的缓存机制的探究
关于RecyclerView中Viewholder和View的缓存机制的探究 http://www.cnblogs.com/littlepanpc/p/4241575.html
- WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制
原文:WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制 和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service ...
- Hibernate中的条件查询完成类
Hibernate中的条件查询有以下三个类完成: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类
随机推荐
- RX(Reactive Extinsion)和IX(Interactive Extinsion)库改名了
RX和IX库是我经常用到的库,今天写一个小程序的时候想用IX库的时候,发现却找不到了.在它的源码的网站上找了一下,发现它们被改名了,具体的变化为为: 对于RX库: Rx-Main -> Syst ...
- 配置Nginx支持SSL SNI(一个IP绑定多个证书) 以及Haproxy实现多域名证书
概述 传统的每个SSL证书签发,每个证书都需要独立ip,假如你编译openssl和nginx时候开启TLS SNI (Server Name Identification) 支持,这样你可以安装多个S ...
- python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...
- 跨过几个坑,终于完成了我的第一个Xamarin Android App!
时间过得真快,距离上次发随笔又是一年多.作为上次发的我的第一个WP8.1应用总结的后继,这次同样的主要功能,改为实现安卓版APP.前几个月巨硬收购Xamarin,把Xamarin集成到VS里了,大大方 ...
- .net中的 InitializeComponent方法
自己做笔记用,纯碎自己做笔记,谁看不惯想喷的请绕道 在winform开发中每一个窗体在构造函数的方法就需要 InitializeComponent方法,就是初始化 窗体组件 例如 TextBox,T ...
- 《IT蓝豹》PlayNewsStandDemo资讯类新闻客户端框架
PlayNewsStandDemo资讯类新闻客户端框架,支持tab滑动切换,当切换到最左边或者最后边的时候停止滑动 本例子切换tab的效果根据AccelerateDecelerateInterpola ...
- 使用hex6x 进行十六进制转换
接触DSP两年多,虽然烧写Flash的操作都没问题,但是要是问起来为什么这么做的,就有点自惭形秽了.所以花些时间,查阅一下资料,整理一下. 1.先看看BurnFlash都需要什么东西. XXX.out ...
- kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
- 敏捷软件开发vs传统软件开发
摘要 本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比. 一.传统软件开发 比较常用的几种传统软件开发方法:瀑布式开发.迭代式开发.螺旋开发 ...
- 关于NIO
操作系统的IO控制 在整个IO控制方式的发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对IO控制的干预,把主机从繁杂的IO控制事务中解脱出来,以便更多地去完成数据处理任务.为了缓和高速CPU和IO ...