Hibernate重点总结和讲解达内科技●教学一部杜书焕dush@tarena.com.cnHibernate基础知识�Hibernate是对象/关系映射ORM(Object/RelationMapping)的解决方案,是一个可以自动的根据xml配置文件来完成对象关系映射,并持久化到数据库的开源组件。�对象持久化,把数据保存在永久的存储介质中(数据库)�POJO类(Plainoldjavaobject),即简单java类(标准的JavaBean)�PO(PersistenceObject)持久层的对象�VO(ValueObject)值对象,数据传递对象�Hibernate的底层是由JDBC实现的。�Hibernate的系统配置文件的名字一般叫做hibernate.cfg.xml,映射文件一般是类名.hbm.xml。Hibernate的编程步骤�1,配置环境,加载hibernate3.jar,第三方工具以及连接数据库使用的jar文件(例ojdbc14.jar),并配置CLASSPATH环境变量。�2,建立数据库,执行DDL语句。�3,写POJO类。�4,写hibernate所需的配置文件:hibernate.cfg.xml,Xxxxx.hbm.xml。�5,调用hibernateAPI。hibernate.cfg.xml配置文件�hibernate.cfg.xml该文件放到CLASSPATH中,在该文件中描述的信息�包括:�1)为了建立数据库连接所需的所有信息。�2)配置数据库特定的Hibernate提供的方言。�3)注册Xxxx.hbm.xml文件的位置(相对于CLASSPATH)。hibernate.cfg.xml配置文件1�hibernate的系统配置类的hibernate.hbm.xml的写法�?xmlversion=1.0encoding=gbk?�!DOCTYPEhibernate-configurationPUBLIC�-//Hibernate/HibernateConfigurationDTD3.0//EN��hibernate-configuration�session-factory�propertyname=connection.driver_class..../property!--使用的数据库的驱动--�propertyname=connection.url..../property!--连接数据库使用的url--�propertyname=connection.username.../property!--连接数据库的用户名--�propertyname=connection.password.../property!--连接数据库的密码--�propertyname=dialect..../property!--使用的数据库方言信息--�propertyname=show_sqltrue/property!--显示sql语句--�propertyname=format_sqltrue/property!--使显示的sql语句格式化--��mappingresource=xxx/xxxx/Xxxxxx.hbm.xml/�!--引入的映射对象的xml文件的全路径及文件名--�/session-factory�/hibernate-configurationHibernate的持久化类的配置文件�EntityClassName.hbm.xml文件,该文件最好同实体的类文件放到一起。�在该文件中描述OR/M的具体细节:�ClasstoTable�IdentifiertoPK�attributetocolumns�javatypevsdatabasetypeHibernate的持久化类的配置文件1�hibernate的持久化类的Xxxxx.hbm.xml的写法�?xmlversion=1.0encoding=gbk?�!DOCTYPEhibernate-mappingPUBLIC�-//Hibernate/HibernateMappingDTD3.0//EN��hibernate-mappingpackage=XXX.XXX.XXX!--映射类所在的包--�classname=“Persontable=“person!--将类和数据库的表联系起来--�idname=“idcolumn=“id“type=“integer”�!--指定主键生成策略--�generatorclass=“native/�/id�!--类中的属性和字段之间建立联系--�propertyname=“namecolumn=“name“type=“string”/�propertyname=“birthdaycolumn=“birthdaytype=“date/�/class�/hibernate-mappingHibernate的编程步骤1�1)使用Configuration解析hibernate.cfg.xml文件,通过Configuration创建SessionFactory对象�2)从SessionFactory中获得Session,一个Session代表和数据库进行的一组交互。�3)开始事务并取得Transaction对象。�4)进行数据库的访问操作(CRUD),其中:�C-session.save();增�R-session.get(Classclazz,Serializableid)orsession.createQuery(Stringhql);查�U-session.update();改�D-session.delete();删�5)结束事务(trans.commit();ortrans.rollback();)�6)关闭sessionsession.close();Hibernate中的核心接口�org.hibernate.cfg.Configuration,用于解析hibernate.cfg.xml文件以及创建SessionFactory对象。�org.hibernate.SessionFactory,用于创建Session对象,是线程安全的。�org.hibernate.Session,持久化管理器,对象级数据库操作,表示应用程序与持外存储层之间交互操作的一个单线程对象。�org.hibernate.Query,对对象作持久化操作或查询操作�org.hibernate.Transaction,用于管理操作事务。对象的唯一标识�id生成策略,唯一表示对象�序列方式sequence,适用于Oracle�idname=idcolumn=id�generatorclass=sequence�paramname=sequence�person_seq!--指定sequence名--�/param�/generator�/id针对MySQL和SQLServer的id生成策略�自增列,适用于SQLServer,MySQL�idname=idcolumn=id�generatorclass=identity/�/idHilo算法id生成策略�高低位算法�idname=idcolumn=id“type=“integer”�generatorclass=hilo�paramname=tablehigh_value/param�!--设置高位值取值的表--�paramname=columnnext_value/param�!--设置高位值取值的字段--�paramname=max_lo10/param�!--指定低位最大值,当取到最大值时会再取一个高位值再运算--�/generator�/id跨数据库平台的id生成策略�根据底层数据库指定生成方法�idname=idcolumn=id�generatorclass=native/�/id�针对Oracle数据库的生成方式还是sequence,只不过需要一个特定名字的sequence,hibernate_sequence。Hibernate实现类关系映射一对一关联�共享主键,也就是一方引用另一方的主键,作为自身的主键,也是外键。�以外键关联,两个实体各自有不同的主键,但其中一个实体有一个外键引用了另一个实体的主键。�例子:汽车和引擎的一对一关系�Car和Engine分别是抽象出的类�接下来看看配置文件的写法Car类的配置文件hibernate-mappingpackage=“hibernate.o2o.entityclassname=Cartable=car_pkidname=idcolumn=idtype=integergeneratorclass=native//idpropertyname=namecolumn=nametype=stringlength=15“/propertyname=manufacturercolumn=manufacturertype=stringlength=50/propertyname=produceDatecolumn=producedatetype=date/one-to-onename=engineclass=Enginecascade=all//class/hibernate-mapping一对一共享主键Engine类的配置文件hibernate-mappingpackage=hibernate.o2o.entityclassname=Enginetable=engine_pkidname=idcolumn=idtype=integergeneratorclass=foreignparamname=propertycar/param/generator/idpropertyname=modelcolumn=modeltype=stringlength=20/propertyname=manufacturercolumn=manufacturertype=stringlength=50/propertyname=produceDatecolumn=producedatetype=date/one-to-onename=carclass=Carconstrained=true//class/hibernate-mapping一对一共享主键Car类的配置文件hibernate-mappingpackage=com.allanlxf.hbn.o2oclassname=Cartable=car_o2o_fkidname=idcolumn=idtype=integergeneratorclass=native//idpropertyname=namecolumn=nametype=string/propertyname=manufacturecolumn=manufacturetype=string/one-to-onename=engineclass=Engineproperty-ref=carcascade=save-update//class/hibernate-mapping一对一外键关联Engine类的配置文件hibernate-mappingpackage=com.al