`

<<Hibernate基础教程>>总结

    博客分类:
  • SSH
阅读更多

一.总体概述:
Hibernate 的底层也是由JDBC 实现的。是对象/关系映射(Object/Relation Mapping)的解决方案,是一个可以自动的根据xml 完成对象关系映射,并持久化到数据库的开源组件。
对象持久化,把数据保存在永久的存储介质中(数据库)OR/M(object relation mapping)对象关系映射。
POJO 类,就是标准的Java Bean。
二,总的hibernate.cfg.xml配置文件和XXXX.hbm.xml的配置:
hibernate 的系统配置文件的名字一般叫做hibernate.cfg.xml,实体映射文件名为类名.hbm.xml。一般将映射类的xml文件和实体类放在一起。
hibernate.cfg.xml 中设置数据库的连接信息,以及引用的其他映射文件的文件名,和一些其他的设置。这个文件一般放在项目的根目录下。
hibernate.cfg.xml 的写法

<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
<property name="show_sql">true</property> 
//显示sql 语句 
<property name="format_sql">true</property> 
//使显示的sql 语句格式化 
<property name="dialect">...</property> 
//使用的数据库方言信息 
<property name="connection.driver_class">....</property> 
<!--使用的数据库的驱动--> 
<property name="connection.url">....</property> 
<!--连接数据库使用的url--> 
<property name="connection.username">...</property> 
<!--连接数据库的用户名--> 
<property name="connection.password">...</property> 
<!--连接数据库的密码--> 
<property name="xml2ddl.auto">create/update/none</property> 
<!--是否自动建表--> 
<mapping resource="xxx/xxxx/Xxxxxx.hbm.xml"/> 
<!--引入的映射对象的xml 文件的全路径及文件名--> 
</session-factory> 
</hibernate-configuration> 

 虽然现在用NetBeans可以自动生成注释等,用不着,但是还是写上,以后参考;
hibernate 的映射类的XXXX.hbm.xml 的写法
对象关系映射

<?xml version="1.0" encoding="gbk"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="XXX.XXX.XXX"> 
<!--映射类所在的包--> 
<class name="Xxxxxx" table="Xxxxx"> 
<!--将类和数据库的表联系起来--> 
<id name="studentId" column="studentId"> 
<generator class="native"/> 
<!--主键生成策略--> 
</id> 
<property name="XXX" column="XXXX" type="string"/> 
<!--类中的属性和字段之间建立联系--> 
<property name="homeAddress" column="homeAddress"/> 
<property name="schoolAddress" column="schoolAddress"/> 
<property name="brithday" column="brithday" type="data"/> 
<!--在hibernate 中其他类型可以自动识别只有Data 类型必须指明--> 
</class> 
</hibernate-mapping> 

 三.Hibernate中对类关系的处理:
one―to―one关系
在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射。
1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束(外健关联)。或者是两个表共享一个主健,表现为子表中的pk同时引
用了父表的pk作外健而存在(主健关联,子表中的pk和fk为一个字段)。
2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。
3、在hibernate中:
A、主健映射:都是one-to-one要用foreign生成策略。
   以汽车car和发动机Engine(一对一关系)为例:
  a、主表Car.hbm.xml的写法 

<class name="Car" table="car_pk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="name" column="name" type="string" /> 
    <one-to-one name="engine" class="Engine" cascade="all"/> 
  </class>

 
注:cascade="all" 表示增删改查Car对象时都会级联增加、删除和修改Engine对象。级联一定是在主对象的映射文件中
  b、附表Engine.hbm.xml的写法

<class name="Engine" table="engine_pk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="foreign"> 
        <param name="property">car</param> 
      </generator> 
    </id> 
    <property name="model" column="model" type="string" /> 
    <one-to-one name="car" class="Car" constrained="true"/> 
  </class> 

 注:constrained="true"表示Engine应用了Car的主健作为外健。
B、外健映射(唯一外键):主表中用one-to-one,副表通过property -ref,  many-to-one来实现
  a、主表Car.hbm.xml的写法 

<class name="Car" table="car_fk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="name" column="name" type="string" /> 
<one-to-one name="engine" class="Engine" 
property-ref="car" cascade="save-update"/> 
  </class>

 
注:name="engine" property-ref="car"表示engine表引用了car表的主健作为他的外健。
cascade="save-update"表示增,改Car对象时都会级联增加和修改Engine对象。
  b、附表Engine.hbm.xml的写法 

<class name="Engine" table="engine_fk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="model" column="model" type="string" /> 
<many-to-one name="car" class="Car" unique="ture"  column="carid"/> 
  </class>

 
注:unique="ture" column="carid"表示为engine表中的外健carid加上唯一约束,使之一对多关系强制转化为一对一关系。
many-to-one关系
在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射
1、数据库中:一个表的主健对应另一个表的外健。
2、javaBean中:一个对象包含另一个对象的一个引用,另一个对象包含这个对象的一组(集合,用set)引用。
3、在hibernate中:用set,key指定具体列。
我们以订单Order(一方)和订单项Item(多方)为例:
a、Order.hbm.xml的写法:

<class name="Order" table="ec_order"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="owner" column="owner" type="string" /> 
    <property name="phone" column="phone" type="string" /> 
    <property name="address" column="address" type="string" /> 
    <set  name="items" cascade="all-delete-orphan" inverse="true"> 
      <key column="orderid" /> 
      <one-to-many class="Item" /> 
    </set> 
  </class> 

 注:inverse=“true”表示忽略集合一端的变化。
cascade="all-delete-orphan":这个比较麻烦一点,我们先来看看把cascade设为all的情况:在我们调用session.delete(order)时,会删除
order下所有的item,但是如果调用order.getItems().remove(item),然后调用session.update(order)则不会删除此item,只会把 ec_item表
中该条item记录的order_id设置为null。因此,如果想通过order.getItems.remove(item)删除对象,需要在已有级联的基础上加上“delete-
orphan”。
b、Item.hbm.xml的写法

<class name="Item" table="ec_item"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="product" column="product" type="string" /> 
    <property name="amount" column="amount" type="integer" /> 
    <many-to-one name="order" class="Order" column="orderid"/> 
  </class> 

 many-to-many关系:
以课程和学生为例,student_course_link为链接表,两端都指定.
a.Student.hbm.xml 

<hibernate-mapping> 
    <class name="com.test.Student" table="student" > 
        <id name="sid" type="string" unsaved-value="null" > 
            <column name="sid" sql-type="char(32)" not-null="true"/> 
            <generator class="uuid.hex"/> 
        </id> 
        <property name="sname"> 
            <column name="sname" sql-type="varchar(16)" not-null="true"/> 
        </property> 
        <set name="course" table="student_course_link" cascade="all" outer-join="false"> 
            <key column="sid"/> 
            <many-to-many class="com.test.Course" column="cid"/> 
        </set> 
    </class> 
</hibernate-mapping>

 
b.Course.hbm.xml

<hibernate-mapping> 
    <class name="com.test.Course" table="course" > 
        <id name="cid" type="string" unsaved-value="null" > 
            <column name="cid" sql-type="char(32)" not-null="true"/> 
            <generator class="uuid.hex"/> 
        </id> 
        <property name="cname"> 
            <column name="cname" sql-type="varchar(16)" not-null="true"/> 
        </property> 
        <set name="student" table="student_course_link" lazy="false" cascade="all"> 
            <key column="cid"/> 
            <many-to-many class="com.test.Student" column="sid"/> 
        </set> 
    </class> 
</hibernate-mapping> 

 四.使用基本的Hibernate_API进行编码:
使用hibernate 编程步骤
a、配置环境,加载hibernate 的jar 文件,以及连接数据库连接使用的jar 文件,并配置CLASSPATH 环境变量。
b、写hibernate 所需的配置文件,hibernate.cfg.xml ,Xxxxx.hbm.xml
c、写POJO 类\\就是标准的Java Bean。
d、调用hibernate API。
如何调用hibernathibernateAPI?
e、创建Configuration 对象。(解析配置文件)
Configuration   config=newConfiguration().configure();
//configure()方法会在CLASSPATH下寻找hibernate.cfg.xml
f、通过Configuration 创建Session Factory (线程安全的重量级组件)。
SessionFactory  sessionFactory=config.buildSessionFactory();
//创建SessionFactory对象
g、通过SessionFactory 创建Session 会话对象。
Session  session=sessionFactory.openSession();
//创建Session对象
h、通过Session 取得事务对象。
Transaction  trans= session.beginTransaction();
//开始事务(创建一个事物对象)
i、通过session 与数据库进行会话。
session.save(Object o); //增
session.update(Object o); //改
session.saveOrUpdate(Object o) //增加或更新
session.delete(object o); //删
session.get(Class clazz, Serializable id); //根据Id 查找对象,找不到就返回null;
session.load(Class clazz, Serializable id); //根据Id 查找对象,找不到就报异常。
session.createQuery(String sql); //自己拼HQL 语言查找对象返回一个Query 对象。
j、提交操作,结束事务。
Trans.commit();
k、关闭Session
session.close();

 

分享到:
评论

相关推荐

    hibernate基础教程.ppt

    hibernate基础教程,准确的总结了hibernate的一些基本的用法

    Hibernate教程

    7.3.4. 使用&lt;idbag&gt; 7.4. 集合例子(Collection example) 8. 关联关系映射 8.1. 介绍 8.2. 单向关联(Unidirectional associations) 8.2.1. 多对一(many to one) 8.2.2. 一对一(one to one) 8.2.3. 一对多...

    Hibernate参考文档

    6.3.5. 使用&lt;idbag&gt; 6.4. 集合例子(Collection example) 7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one ...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    SSH配置及基础教程

    这是我在学习SSH框架时候总结的资料,觉得里面写得比较详细,有截图及说明,可以根据里面的配置你完成自己的SSH项目

    hibernate_reference中文文档.pdf

    1. 教程 ......................................................................... 1 1.1. 第一部分 - 第一个 Hibernate 应用程序 ................................. 1 1.1.1. 设置 ............................

    Java Web程序设计教程-源代码

    《Java Web程序设计教程》介绍使用Java语言开发Web应用的主流技术。首先,从基本开发技术入手,讲解了JSP、servlet、SQL以及JDBC的基础概念及应用方法。然后,逐步过渡到框架技术的讲解,包括Struts2框架技术应用、...

    JavaEE帮助手册_分卷压缩01

    ,JAVA程序员必读--基础篇,JDK_API_1_6_zh_CN,JDK_API_1_5_zh_CN,jQueryAPI_1.7.1_CN,jquery1.8.2_,MySQL中文参考手册,oracle_Function_MGHD,PHP_MySQL教程,lucene总结,spring3.0_doc_api,XMLHTTP_手册,张孝祥java...

    阿里巴巴面试题leetcode-JAVA-wiki::face_blowing_a_kiss::beaming_face_with_smiling_eyes:JAVA程序员提高篇,pdf手册集合:collision:

    系列课程总结) Axure RP 指南 - v1.1.pdf Docker —— 从入门到实践 - v1.0 Git 教程 - v1.0.pdf (感觉 也挺好可以查看) GitHub 使用手册 - 基础篇 Gradle 实战中文版 - v1.0 Hibernate 教程 - v1.0.pdf IntelliJ ...

    阿里巴巴面试题leetcode-java_wiki:维基百科

    系列课程总结) Axure RP 指南 - v1.1.pdf Docker —— 从入门到实践 - v1.0 Git 教程 - v1.0.pdf (感觉 也挺好可以查看) GitHub 使用手册 - 基础篇 Gradle 实战中文版 - v1.0 Hibernate 教程 - v1.0.pdf IntelliJ ...

    阿里巴巴面试题leetcode-student_books:我的学习书库

    系列课程总结) Axure RP 指南 - v1.1.pdf Docker —— 从入门到实践 - v1.0 Git 教程 - v1.0.pdf (感觉 也挺好可以查看) GitHub 使用手册 - 基础篇 Gradle 实战中文版 - v1.0 Hibernate 教程 - v1.0.pdf IntelliJ ...

    java面试题以及技巧

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题目与技巧1

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题及技巧4

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题及技巧3

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题以及技巧6

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或...

Global site tag (gtag.js) - Google Analytics