Hibernate入门

一、O/R Mapping

         1、 什么是 O/RMapping?

                  对象-关系映射是一门非常实用的工程技术,它实现了Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射。

         2、 O/R Mapping 的优点

                  提高生产率

                  可维护性

                  更好性能


二、持久层技术比较


三、Hibernate的组成

         1、 Hibernate-cfg.xml 基础信息配置文件
         2、 持久化类的设计

         3、持久化类和关系数据库的映射

         4、应用的开发

四、Hibernate-cfg.xml

        <hibernate-configuration>

                <session-factory>

                        <property name="dialect">

                                org.hibernate.dialect.MySQLDialect

                        </property>

                        <propertyname="connection.url">

                                jdbc:mysql://localhost:3306/test

                        </property>

                        <property name="connection.username">root</property>

                        <property name="connection.driver_class">

                                com.mysql.jdbc.Driver

                        </property>

                        <property name="myeclipse.connection.profile">

                                mysqlconnection

                        </property>

                        <mapping resource="com/my/po/Stu.hbm.xml"/>

                </session-factory>

        </hibernate-configuration>


五、持久化Java类必须遵循的原则

        1、 为类的持久化字段申明访问方法( get/set )。 Hibernate JavaBeans 风格的属性实行持久化。
        2、实现一个默认的构造方法( constructor )。这样的话 Hibernate 就可以使用 Constructor.newInstance () 来实例化它们。
        3、如果是集合类型的属性,它的类型必须定义为集合的接口。例如: List Set
        4、提供一个标识属性( identifier property )。如果没有该属性,一些功能不起作用,比如:级联更新( Cascaded updates Session.saveOrUpdate ()

六、持久化类和关系数据库的映射



七、*.hbm.xml文件

<hibernate-mapping>

    <class name="com.my.po.Stu" table="stu" catalog="test">

     <cache usage="read-write"/>

        <id name="stuId" type="java.lang.Integer" unsaved-value="none">

            <column name="stu_id" />

            <generatorclass="increment" />

        </id>

        <property name="stuName" type="java.lang.String">

            <column name="stu_name" length="10" />

        </property>

        <property name="stuSec" type="java.lang.String">

            <column name="stu_sec" length="10" />

        </property>

        <property name="stuSco" type="java.lang.Integer">

            <column name="stu_sco" />

        </property>

    </class>

</hibernate-mapping>


八、Configuration

       1、 概述: Configuration 类负责管理 Hibernate 的配置信息。它包括如下内容:

                - Hibernate运行的底层信息:数据库的URL、用户名、密码、   JDBC驱动类,数据库Dialect,数据库连接池等。

                Hibernate映射文件(*.hbm.xml)。

        2、Hibernate 配置的两种方法:

                - 属性文件(hibernate.properties)。

                调用代码:Configurationcfg = new Configuration();

                - Xml文件(hibernate.cfg.xml)。

                调用代码:Configuration cfg = newConfiguration().configure();


九、SessionFactory

        1、 概述: 应用程序从 SessionFactory (会话工厂)里获得 Session( 会话 ) 实例。它在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂 —— 例如在应用初始化时被创建。然而,如果你使用 Hibernate 访问多个数据库,你需要对每一个数据库使用一个会话工厂。

        会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。

        2、 调用代码:

                SessionFactorysessionFactory = cfg.buildSessionFactory();


十、Session(会话)

        1、 概述:

                Session代表与数据库之间的一次操作,它的概念介于ConnectionTransaction之间。

                Session也称为持久化管理器,因为它是与持久化有关的操作接口。

                Session通过SessionFactory打开,在所有的工作完成后,需要关闭。

                它与Web层的HttpSession没有任何关系。

        2、 调用代码

                Session session = sessionFactory.openSession();


十一、Transaction(事务)

        1、 概述:

                它将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA——允许应用通过一组一致的API控制事务边界。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。

        2、 调用代码:

                Transaction tx = session.beginTransaction();

        注: 使用 Hibernate 进行操作时(增、删、改)必须显示的调用 Transaction (默认: autoCommit =false )。

十二、Query
        1、 概述:

                Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言编写。

        2、 调用代码:

                Query query = session.createQuery(“from User”);


十三、映射文件中unsaved-value 属性

        1、 判断对一个对象的操作是保存还是更新
        2、显式使用 session.save () 或者 session.update () 操作对象的时候,用不到 unsaved-value
        3、根据 ID 值判断操作的对象是否是新的内存临时对象
        4、属性值
                - none : 总是更新
                - any: 总是存储
                - null : ID 为空 (null) 时存储
                - valid: ID 为空 (null) 或者指定值时存储











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值