hibernate中configuration和配置文件笔记
- hibernate的核心类和接口
- Configuration类
作用:(1)读取hibernate.cfg.xml文件
(2)管理对象关系映射文件<mapping resource="">
(3)加载hibernate的驱动,例如:url,用户名
(4)管理hibernate配置信息
- hibernate.cfg.xml
- 对象关系映射文件
- SessionFactory(会话工厂)接口
- 缓存sql语句和某些数据(称为Session级缓存)
- 在应用程序初始化的时候创建,是一个重量级类(耗内存),一般使用单例模式保证一个应用中只需要一个SessionFactory实例
- 在如果某个应用访问多个数据库,则要创建多个会话工厂实例,一般是一个数据库一个会话工厂实例。
- 通过SessionFactory接口可以获得Session(会话)实例。
- 示意代码如下:
1 Configuration cf = new Configuration().configure();
2 SessionFactory sf = cf.buildSessionFactory();
3 Session s = sf.getCurrentSession();//或者是:Session s = sf.openSession();注意:这里有关sf.getCurrentSession()和sf.oopenSession()的区别:openSession()是每次可以获取一个全新的session;getCurrentSession()获取的是和当前线程绑定的session,即:在同一个线程中我们获取的session是同一个session,这样的话可以利于事务的控制。如果是使用getCurrentSessionn(),需要再hibernate.cfg.xml文件中配置如下:
<!--配置可以使用getCurrentSession-->
<property name="hibernate.current_session_context_class">thread</property>在使用过程中openSession()和getCurrentSession()的选择原则:①如果需要在同一个线程中,保证使用同一个Session时,则使用getCurrentSession();②如果在一个线程中,需要使用不同的Session,则使用openSession();
- openSession()和getCurrentSession区别:
- 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession() 创建的session则不会
- 采用getCurrentSession()创建的session在commit或rollback时,会自动关闭,而采用openSession()创建的session必须手动关闭。
- 使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
<!--如果使用的是本地事务(jdbc事务)配置可以使用getCurrentSession,-->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 如果使用的是全局事务(jta事务)-->
<properity name="hibernate.current_session_context_class">jta</properity>
- 如何查看session是否及时关闭
- windows:
- 在cmd命令中输入:netstat -an [oracle 1521/mysql 3306/sql server 1433]
- linux/unix:
- 在命令行中输入:netstat -an 或者top
- windows:
- session接口的主要作用是:
- session一个实例代表与数据库的一次操作(一次操作可以使crud组合)
- session实例通过SessionFactory获取,用完及时关闭
- session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSession()获取
- session可以看做是持久化管理器,它是与持久化操作相关的接口
- Session(会话)接口的几个重要方法:
- 保存一个对象(记录)——save方法
- 删除一个对象(记录)——delete方法
- 查询一个对象(记录)——get/load方法
- get()和load()区别:
- get()方法直接返回实体类,如果查不到数据则返回null,load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),当代理对象被调用时,如果没有数据不存在,就会抛出org.hibernate.ObjectNoFoundException异常
- load先到缓存(session缓存/二级缓存)中取查,如果没有则返回一个代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时候,才到DB中去查询,这就是常说的load在默认情况下支持延迟加载(lazy)
- get先到缓存(session缓存/二级缓存)中去查,如果没有就到DB中去查(即马上发出sql)。总之,如果确定DB中有这个对象就用load(),不确定就用get()(这样可以提高效率)。
- get()和load()区别:
- 修改一个对象(记录)——update方法
hibernate中configuration和配置文件笔记的更多相关文章
- hibernate中Configuration类的作用
问题:我们在获得一个SessionFactory对象的时候经常是写下面这行代码: SessionFactory sessionFactory = new Configuration().configu ...
- Hibernate中延迟加载和缓存
什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象 访问 ...
- hibernate和mybatis出现配置文件xml的文件报错Multiple annotations found at this line(转)
hibernate中的xml配置文件Multiple annotations found at this line,出现这个红叉报错,直接是把 <?xml version="1.0&q ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate中的Configuration类
Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例. 下面 ...
- 关于Hibernate中的Configuration
Hibernate中,关于从 Configuration中建立一个SessionFactory常用的可以有两种方法,一种是为Configuration提供hibernate.cfg.xml配置文件,还 ...
- hibernate中3个重要的类 Configuration SessionFactory Session
配置类Configuration 主要负责管理hibernate的配置信息以及启动hibernate,在hibernate运行时,配置文件取读底层的配置信息,基本包括数据库驱动,url.usernam ...
随机推荐
- 挖矿程序的工作原理(BTC为例)
Mining时代进化:CPU挖矿 -> GPU挖矿 -> FPGA挖矿 -> ASIC挖矿CPU挖矿时代:SENGENERATEGPU挖矿时代:GETWORK Miner:挖矿的程序 ...
- angular ajax请求 结果显示显示两次的问题
angular 项目中,由于用到ajax 请求,结果显示如下情况 同样的接口,显示两次,其中第一次请求情况为 request method 显示为opttions 第二次的情况是 为啥会出现如此的情况 ...
- jvisualvm All-in-One Java Troubleshooting Tool
java 监控.故障.性能可视化分析 VisualVM: Download https://visualvm.github.io/download.html All-in-One Java Troub ...
- 分析SignalTap的仿真结果
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- HZAU2018年十大阅读之星演讲稿
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- java System类的一些静态方法
package cn.sasa.demo2; public class SystemDemo { public static void main(String[] args) { func_array ...
- P1896 [SCOI2005]互不侵犯 状压dp
正解:状压dp 解题报告: 看到是四川省选的时候我心里慌得一批TT然后看到难度之后放下心来觉得大概没有那么难 事实证明我还是too young too simple了QAQ难到爆炸TT我本来还想刚一道 ...
- 软件项目管理:什么是baseline
只要是接触软件的人,都或多或少的需要接触一些软件相关的名词术语.其中baseline也许是大家听得最多,但是却是最模糊的概念. 其中百度百科给出的解释如下 基线(Baseline) 基线是软件文档或源 ...
- apache在mac下403问题
症状:在mac下使用xampp环境,httpd.conf权限,但访问网站报403错误. 解决方案:将对应文件目录权限改为755 修改后,Thinkphp访问提示Application不可写,无法创建内 ...
- iOS开发swift语法0基础篇—————(swift技术交流群:361513739)
iOS开发之swift语法0基础篇:点击打开链接 swift技术交流QQ群361513739