




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏很大一部分取决于你对这个框架API的理解程度,所以在此篇博客中我们就一起来看一下Hibernate的API和配置文件的相信情况。下面我们一一来看一下:一:使用SchemaExport自动创建数据库表 我相信在此之前大家应该都是用最原始的方法:SQL建立数据库相关的表,然后再Java写映射写配置文件.现在我们学习了hibernate以后就可以用一些偷懒的方式了,我们可以使用SchemaExport自动创建数据库,建立根据你的对象建立数据库表。下面我们来看一下具体操作:首先当然要建好POJOobject,XMLMappingFile(也可以使用工具根据POJOclass建立),配置文件(hibernate.cfg.xml),然后运行下面的Java代码1. importorg.hibernate.cfg.Configuration;2. 3. importorg.hibernate.tool.hbm2ddl.SchemaExport;4. 5. 6. publicclassSchemaUtil7. publicstaticvoidmain(Stringargs)8. 9. Configurationcfg=newConfiguration().configure();10. 11. SchemaExportschemaExport=newSchemaExport(cfg);12. 13. schemaExport.create(false,true);14. 15. 16. 再看看数据库,表是不是已经帮你建好了,对于我这样不熟悉数据库的人真是太方便了。二使用Hibernate操作数据库需要七个步骤(1)读取并解析配置文件Configurationconf=newConfiguration().configure();(2)读取并解析映射信息,创建SessionFactorySessionFactorysf=conf.buildSessionFactory();(3)打开SessionSessionsession=sf.openSession();(4)开始一个事务(增删改操作必须,查询操作可选)Transactiontx=session.beginTransaction();(5)数据库操作session.save(user);/或其它操作(6)提交事务(回滚事务)mit();(tx.rollback();)(7)关闭sessionsession.close();下面我们来详细看一下这七大步骤的API:Configuration:负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hperties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了;他为什么会自动加载hibernate.cfg.xml文件的呢?我们看一下configure源码就一目了然了1. publicConfigurationconfigure()throwsHibernateException2. 3. configure(/hibernate.cfg.xml);4. 5. returnthis;6. 7. 从这里我们可以看出,在hibernate源码中,他就是默认的加载hibernate.cfg.xml,当然你也可以指定加载配置文件,Configuration提供了相应的方法:publicConfigurationconfigure(Stringresource)publicConfigurationconfigure(URLurl)publicConfigurationconfigure(FileconfigFile)SessionFactiory:Configuration的实例会根据当前的配置信息,构造SessionFactory实例。SessionFactory是线程安全的,一般情况下一个应用中一个数据库共享一个SessionFactory实例。Hibernate的SessionFactory接口提供Session类的实例,Session类用于完成对数据库的操作。由于SessionFactory实例是线程安全的(而Session实例不是线程安全的),所以每个操作都可以共用同一个SessionFactory来获取Session。Hibernate配置文件分为两种格式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,因此构建SessionFactory也有两种方法,下面分别介绍。1.从XML文件读取配置信息构建SessionFactory从XML文件读取配置信息构建SessionFactory的具体步骤如下。(1)创建一个Configuration对象,并通过该对象的configure()方法加载Hibernate配置文件,代码如下。Configurationconfig=newConfiguration().configure();(2)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。SessionFactorysessionFactory=config.buildSessionFactory();构建SessionFactory要放在静态代码块中,因为它只在该类被加载时执行一次。2从Java属性文件读取配置信息构建SessionFactory从Java属性文件读取配置信息构建SessionFactory的具体步骤如下。(1)创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件perties,代码如下。Configurationconfig=newConfiguration();(2)由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的addClass()方法实现,具体代码如下。config.addClass(BranchForm.class);addClass()方法用于加载实体类。(3)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。SessionFactorysessionFactory=config.buildSessionFactory();Session:一般的持久化方法(CRUD)都是通过Session来调用的,Session是非线程安全的。Session的创建与关闭:Session是一个轻量级对象,通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session。Session的创建创建SessionFactory后,就可以通过SessionFactory创建Session实例,通过SessionFactory创建Session实例的代码如下。Sessionsession=sessionFactory.openSession();创建Session后,就可以通过创建的Session进行持久化操作了。Session的关闭在创建Session实例后,不论是否执行事务,最后都需要关闭Session实例,释放Session实例占用的资源。关闭Session实例的代码如下:session.close();下面来看一下:getCurrentSession与openSession()的区别1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。2getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭3.getCurrentSession()使用当前的session,openSession()重新建立一个新的session这里getCurrentSession本地事务(本地事务:jdbc)时要在配置文件里进行如下设置*如果使用的是本地事务(jdbc事务)thread*如果使用的是全局事务(jta事务)jtaopenSession()与getCurrentSession()有何不同和关联呢?在SessionFactory启动的时候,Hibernate会根据配置创建相应的CurrentSessionContext,在getCurrentSession()被调用的时候,实际被执行的方法是CurrentSessionContext.currentSession()。在currentSession()执行时,如果当前Session为空,currentSession会调用SessionFactory的openSession。所以getCurrentSession()对于JavaEE来说是更好的获取Session的方法。事务transaction:Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBCTransaction的封装,或者是JTATransaction的封装,下面我们详细的分析:Hibernate可以配置为JDBCTransaction或者是JTATransaction,这取决于你在perties或者hibernate.cfg.xml中的配置,如果你什么都不配置,默认情况下使用JDBCTransaction,如果你配置为:hibernate.transaction.factory_class=net.sf.hibernate.transaction.JTATransactionFactory将使用JTATransaction。JDBCTransaction究竟是什么东西呢?来看看源代码就清楚了:Hibernate3.3.2源代码中的类org.hibernate.transaction;.JDBCTransaction:1. publicvoidbegin()throwsHibernateException2. 3. .4. 5. try6. 7. toggleAutoCommit=jdbcContext.connection().getAutoCommit();8. 9. if(log.isDebugEnabled()10. 11. log.debug(currentautocommitstatus:+toggleAutoCommit);12. 13. 14. 15. if(toggleAutoCommit)16. 17. log.debug(disablingautocommit);18. 19. jdbcContext.connection().setAutoCommit(false);20. 21. 22. 23. .这是启动Transaction的方法,看到connection().setAutoCommit(false)了吗?是不是很熟悉?再来看1. publicvoidcommit()throwsHibernateException2. 3. .4. 5. try6. 7. commitAndResetAutoCommit();8. 9. log.debug(committedJDBCConnection);10. 11. committed=true;12. 13. if(callback)14. 15. jdbcContext.afterTransactionCompletion(true,this);16. 17. 18. 19. notifyLocalSynchsAfterTransactionCompletion(Status.STATUS_COMMITTED);20. 21. .;22. 23. commitAndResetAutoCommit方法源码:24. 25. privatevoidcommitAndResetAutoCommit()throwsSQLException26. 27. try28. 29. jdbcContext.connection().commit();30. 31. 32. 33. finally34. 35. toggleAutoC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (正式版)DB5404∕T 0032-2024 《墨脱特色菜 茶青炒蛋》
- 2026年水果种植公司员工录用与入职培训制度
- T-CIATCM 030.4-2019 中医临床护理信息基本数据集 第4部分:NICU护理记录
- 第6单元 22 皇帝的新装新教材七年级语文上册同步说课稿(统编版2024)河北专版
- 一篇小说解决高考小说问题
- 第4课 纸卷魔术说课稿-2025-2026学年小学美术苏少版四年级下册-苏少版
- 淘宝客服培训知识课件
- 淘宝客服培训新知识课件
- 新能源汽车维修工程 课件 第九章 特斯拉Model S维修实例
- 第2课 让红领巾更鲜艳教学设计小学劳动二年级上册鄂教版《劳动教育》
- 时空地理行业可信数据空间建设指引
- 2025至2030年中国物联网金融行业市场竞争力分析及发展策略分析报告
- 2025年锑矿合作协议书
- 2025年中考历史总复习《中国历史》八年级上册知识要点汇编
- 工程带班合同协议
- 安装熄火保护合同协议
- 电动工具智能制造工艺-全面剖析
- T-CCPEF 086-2024 生态环境数智化监测与预警技术规范
- 药师个人工作计划范本
- 低空经济园区项目可行性研究报告(模板范文)
- 2025乡村医生考试试题附含参考答案(完整版)
评论
0/150
提交评论