第一章Hibernate入门及基本操作_第1页
第一章Hibernate入门及基本操作_第2页
第一章Hibernate入门及基本操作_第3页
第一章Hibernate入门及基本操作_第4页
第一章Hibernate入门及基本操作_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hibernate持久化框架

课程学习目标掌握Hibernate的基本配置掌握Hibernate的基本操作掌握Hibernate各种关系映射掌握Hibernate的HQL查询掌握Hibernate的Criteria查询掌握各种Hibernate优化技术熟悉Hibernate的注解配置了解其他持久化技术的基本使用本阶段课程介绍MVC框架Struts2.2.xORM框架Hibernate3.xBean管理Spring2.5主要内容Hibernate简介Hibernate的Xml配置方法ORM概述Hibernate应用步骤主键生成机制本讲目标掌握Hibernate的基本配置方式理解ORM掌握Hibernate的基本操作和应用步骤掌握常用的主键生成机制JDBC的缺点开发效率低代码冗余pstmt的setXX方法方法参数冗余的getXX方法如果POJO的属性很多,代码增加重复性工作多能否使用对象将POJO作为参数,简单的完成增删改查操作?什么是ORMORM:ObjectRelationalMapping(对象-关系映射)可以理解为一种数据持久化技术,其主要是把对象模型,例如JavaBean对象,和关系型数据库的表建立对应关系,并且提供了一个通过JavaBean对象去操作数据库表的机制ORM优点:ORM在对象模型和关系数据库表之间建立了一座桥梁程序员就不需要再使用SQL语句操作数据库中的表直接操作JavaBean对象就可以实现数据的存储、查询、更改和删除等操作。常见的ORM框架常见的ORM框架HibernateiBatisToplinkCayennejRelationalFrameworkApacheOJBHibernate简介Hibernate是对象/关系映射(ORM)的解决方案Hibernate是Java应用和关系数据库之间的桥梁,负责将Java对象和关系数据之间的映射。Hibernate的目标是成为Java平台管理数据持久性问题的完整解决方案Hibernate是一个开放源代码的对象关系映射框架,它是对JDBC进行了非常轻量级的对象封装使Java开发人员更加专注于业务的熟悉和处理,而非对数据库的基本操作,同时也能让开发人员以面向对象的思想来操作数据库。Hibernate简介Hibernate作者——GavinKingHibernate创始人《Hibernateinaction》作者EJB3.0的Entitybeanspecification的实际领导人(sun任命的领导人是LindaDeMichiel)参加了XDoclet和Middlegen的开发2003年9月加入JBoss,全职进行Hibernate开发Hibernate一个开发源代码的对象关系映射框架对JDBC进行了非常轻量级的对象封装将JavaBean对象和数据库的表建立对应关系Hibernate简介Hibernate资源下载http://最新版本为4.2.7最新稳定版本为4.2.3但使用最多最稳定的还是3.1.3Hibernate优势Hibernate是一个优秀的Java持久化层解决方案是当今主流的对象—关系映射工具Hibernate简化了JDBC繁琐的编码Hibernate将数据库的连接信息都存放在配置文件中Sessionsession=HiberanteUtil.getSession();Queryquery=session.createQuery("fromUser");List<User>users=(List<User>)query.list();Hibernate配置文件hibernate.cfg.xml文件映射文件的配置(*.hbm.xml)<propertyname="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="connection.url">jdbc:oracle:thin:@88:1521:ORCL</property><propertyname="connection.username">jbit</property><propertyname="connection.password">bdqn</property><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>数据库URL数据库用户名数据库密码数据库驱动使用的不同数据库类型hibernate.cfg.xml文件<hibernate-mapping><classname="cn.jbit.houserent.bean.User"table="users"schema="jbit"><idname="id"type="java.lang.Long"><columnname="id"/><generatorclass="native"/></id><propertyname="password"type="java.lang.String"lazy="false"><columnname="password"length="50"not-null="true"/></property><propertyname="telephone"type="java.lang.String"lazy="false"><columnname="telephone"length="12"/></property><propertyname="username"type="java.lang.String"lazy="false"><columnname="username"length="50"/></property></class></hibernate-mapping>User.hbm.xml文件第一个Hibernate项目搭建一个Hibernate应用需要以下步骤:步骤一、新建一个Java项目或者web项目步骤二、为新建项目添加Hibernate支持添加需要的jar文件Hibernate3.jarrequired/*.jar在classpath下加入hibernate.cfg.xml第一个Hibernate项目步骤三、配置hibernate.cfg.xml为Hibernate指定数据库驱动类名为Hibernate指定数据库URL为Hibernate指定数据库用户名为Hibernate指定数据库用户口令为Hibernate指定数据库方言第一个Hibernate应用步骤四、创建一个实体类Student创建Student类提供getter和setter方法第一个Hibernate应用步骤五、创建Student.hbm.xml映射文件为Student创建映射文件映射文件的命名规则为实体类名.hbm.xml第一个Hibernate应用步骤五、将Student.hbm.xml映射文件配置到hibernate.cfg.xml文件中步骤六、测试应用。持久化与ORM持久化将程序中数据在瞬时状态和持久状态间转换的机制持久化与ORM持久化层JDBC就是一种持久化机制将程序数据直接保存成文本文件也是持久化机制的一种实现在分层结构中,DAO层(数据访问层)也被称为持久化层持久化完成的操作将对象保存到关系型数据库中将关系型数据库中的数据读取出来 以对象的形式封装持久化与ORMORM(ObjectRelationalMapping,对象关系映射)编写程序的时候,以面向对象的方式处理数据保存数据的时候,却以关系型数据库的方式存储ORM解决方案包含下面四个部分在持久化对象上执行基本增、删、改、查操作的API用于对持久化对象或属性查询的一种语言或者API用于实体关系映射的工具能够与事务对象交互、执行检查、延迟加载以及其他优化功能持久化与ORM持久化将程序中数据在瞬时状态和持久状态间转换的机制Hibernate对象的三种状态通过session对实体对象进行CRUD操作之后,该实体对象可能会经历三种状态的转换Transient:瞬时状态(瞬态)没有进行持久化,也没有与任何session关联Persistent:持久化状态同一个session进行了关联Detached:托管状态(游离态)已经持久化,但是没有和session进行关联实体映射配置Hibernate内置类型映射Hibernate类型Java类型SQL类型int/integerint/Integerintegerlonglong/Longbigintshortshort/Shortsmallintbytebyte/Bytetinyintfloatfloat/Floatfloatdoubledouble/Doubledoublebig_decimaljava.math.BigDecimalNUMERICcharacterchar/Characterchar(1)stringjava.lang.Stringvarchar(255)booleanboolean/Booleanbityes_noboolean/Booleanbittrue_falseboolean/Booleanbit实体映射配置Hibernate内置类型映射Hibernate类型Java类型SQL类型datejava.util.Date或者java.sql.Datedatetimejava.util.Date或者java.sql.Timetimetimestampjava.sql.Timestamptimestamp

calendarjava.util.Calendartimestamp

calendar_datejava.util.CalendardateId生成策略Id生成策略也叫主键生成策略以下说明基于hbm.xml的主键生成策略<idname="id"type="java.lang.Integer">

<columnname="ID"precision="8"scale="0"/>

<generatorclass="native"/>

</id>Id生成策略在Hibernate的映射文件中通过指定Generator,来定义主键的生成方式,Hibernate中可以定义的主键生成方式有:生成器类型名说明备注increment用于long、short、int类型唯一标识,只有在没有其他进程往同一张表中插入数据时才能使用在集群中不可使用identityMySQL、SQLServer支持的数据库主键生成方式sequenceOracle数据库支持的主键生成方式native主键的生成方式由数据库平台决定,如Oracle使用sequence,MySQL使用auto_increment跨数据库平台hilo使用高地位算法获取主键uuid使用uuid算法生成主键guid使用guid算法生成主键联合主键的映射方式极少数情况下,开发人员可能会遇见联合主键的应用,联合主键可以使用如下语法在hbm.xml中定义<composite-idmapped="true"> <key-propertyname="firstName"></key-property> <key-propertyname="lastName"></key-property></composite-id>联合主键映射方式在实体中可以以组件的形式来映射数据库中的联合主键组件类,必须实现java.io.Serializable接口,同时要重写equals和hasCode方法Hibernate核心APIorg.hibernate.cfg.Configuration顾名思义,Configuration负责管理Hibernate的配置信息,其中包括一些关键的属性如:数据库连接URL-hibernate.connetion.url数据库驱动程序类名-hibernate.connection.driver_class数据库用户名-hibernate.connection.username数据库用户口令-hibernate.connection.password数据库方言-hibernate.

dialect使用Hibernate,必须提供以上基本的信息用于对特定数据库的支持,已完成初始化工作。Hibernate核心APIorg.hibernate.cfg.Configuration在应用中,需要使用Configuration的configure()搜寻并加载hibernate.cfg.xml,为后续操作提供基本配置通过Configuration对象调用buildSessionFactory()返回一个SessionFactory对象由于配置信息已经由Hibernate维护并绑定,在返回的SessionFactory之上,因此一般情况下无需再对其进行操作Hibernate核心APIorg.hibernate.SessionFactorySessionFactory负责创建Session实例。我们可以通过Configuration实例构建SessionFactoryConfiguration实例config会根据当前的配置信息,构造SessionFactory实例并返回。SessionFactory一旦构造完毕,即被赋予特定的配置信息Hibernate核心APIorg.hibernate.SessionSession是持久层操作的基础,相当于JDBC中的ConnectionSession的生命周期是以事务的开始和结束来界定的Session完成的主要功能就是提供对实体对象的CRUD操作如将对应的实体对象保存至数据库save(Objecto)如将数据从数据库中查询出来load()和get()等如将数据从数据库中删除的方法delete()等SessionAPI方法说明save(Objecto)将对象进行持久化操作delete(Objecto)删除该实例对应的数据库记录update(Objecto)更新指定对象对应的数据库记录saveOrUpload(Objecto)更新或者新增一条记录get(Classclazz,Serializableid)根据指定id获取一条数据库记录load(Classclazz,Serializableid)根据指定id加载一条数据库记录flush()强制刷新缓冲区clear()强制清空缓冲区使用Hibernate操作数据库使用Hibernate操作数据库需要七个步骤(1)读取并解析配置文件(2)读取并解析映射信息,创建SessionFactory(3)打开Session(4)开始一个事务(增删改操作必须,查询操作可选)Configurationconf=newConfiguration().configure();SessionFactorysf=conf.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();使用Hibernate操作数据库使用Hibernate操作数据库需要七个步骤(5)数据库操作(6)提交事务(回滚事务)(7)关闭sessionsession.save(user);//或其它操作mit();(tx.rollback();)session.close();如果Hibernate配置文件中,current_session_context_class参数设置为thread并采用SessionFactory的getCurrentSession()方法获的Session实例则不需要此步使用Hibernate实现增加用户Configurationconf=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{conf=newConfiguration().configure();sessionFactory=conf.buildSessionFactory();session=sessionFactory.openSession();

tx=session.beginTransaction();

session.save(user);

mit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{

session.close();

sessionFactory.close();}1.读取配置文件2.创建SessionFactory3.打开session4.开始一个事务5.持久化操作6.提交事务6.回滚事务7.关闭session使用Hibernate实现用户的修改、删除Configurationconf=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{conf=newConfiguration().configure();sessionFactory=conf.buildSessionFactory();session=sessionFactory.openSession();

tx=session.beginTransaction();

session.update(user);

mit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{

session.close();

sessionFactory.close();}修改用户修改用户信息Configurationconf=null;SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{conf=newConfiguration().configure();sessionFactory=conf.buildSessionFactory();session=sessionFactory.openSession();

tx=session.beginTransaction();

session.delete(user);

mit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{

session.close();

sessionFactory.close();}删除用户删除用户信息增、删、改操作一定要在事务环境中完成修改、删除数据时,需要先加载数据使用Hibernate实现查询操作Session提供了两种方法加载数据Objectget(Classclazz,Serializableid):通过实体类Class对象和ID加载数据Objectload(ClasstheClass,Serializableid):通过实体类Class对象和ID加载数据两种方法加载数据的区别使用get方法加载数据时,如果数据不存在,返回null对象使用load方法加载数据时,如果数据不存在,系统就会抛出异常Configurationconf=null;SessionFactorysessio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论