Hibernate基础---映射文件、配置文件、Java对象的三种状态

来源:互联网 发布:网络融资平台利息高 编辑:程序博客网 时间:2024/06/03 12:43

一、配置Hibernate运行环境

这里我们使用Myeclipse 10自带的Hibernate支持配置环境

1.首先你需要创建数据连接(DB Driver)
这里写图片描述
配置的是oracle数据连接
2.右键项目选择 Myeclipse –>Add Hibernate Capabilities…
3.后续根据个人选择即可

会自动生成Hibernate环境和生成核心配置文件 以及 Hibernate的工具类HibernateSessionFactory

配置文件

<hibernate-configuration>    <session-factory>        <!-- 配置连接数据库的基本配置 -->        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>        <property name="connection.username">bajie</property>        <property name="connection.password">556556</property>        <propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>        <!-- 是否显示sql语句 -->        <property name="show_sql">true</property>        <!-- 是否格式化显示sql语句 -->        <property name="format_sql">true</property>        <!-- 引入orm映射文件  -->        <mapping resource="entiy/Users.hbm.xml" />    </session-factory>

HibernateSessionFactory工具类

最常用的方法

public class HibernateSessionFactory {    /**     * 保存线程变量,该变量只保存一个值,不同的线程保存各自的值     */    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();    private static org.hibernate.SessionFactory sessionFactory;    private static Configuration configuration = new Configuration();    //配置文件的路径    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";    private static String configFile = CONFIG_FILE_LOCATION;    //获取session    //一次请求是一个线程,session是储存在threadLocal中    public static Session getSession() throws HibernateException {        //从本次线程中获取session        Session session = (Session) threadLocal.get();        //如果session为空或者 session未有开启--->在本线程从新获取session        if (session == null || !session.isOpen()) {            //如果sessionFactory 为空 那么从新创建一个sessionFactory             if (sessionFactory == null) {                rebuildSessionFactory();            }            //进行获取session 的处理            session = (sessionFactory != null) ? sessionFactory.openSession()                    : null;            //把这次从新获取到的session 写入线程            threadLocal.set(session);        }        return session;    }}

映射文件District.hbm.xml

<hibernate-mapping>    <!-- name对应的实体类  table对应数据库表 schema数据库管理员-->    <class name="entiy.District" table="DISTRICT" schema="BAJIE">        <!-- id表示主键  property属性  name对应实体类的属性 type是对应java的数据类型 -->        <!-- column 对应表的哪一个列 -->        <id name="id" type="java.lang.Integer">            <column name="ID" precision="4" scale="0" />            <!-- 主键生成策略 -->            <generator class="increment" />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="100" not-null="true" />        </property>        <!-- Hibernate的一对多的映射关系 -->        <set name="streets" inverse="true"  cascade="all" >            <key>                <column name="DISTRICT_ID" precision="4" scale="0" />            </key>            <one-to-many class="entiy.Street" />        </set>    </class></hibernate-mapping>

二、Java对象的三种状态

这里写图片描述

Hibernate 通过session管理Java对象 的状态,持久态是一个很重要的状态,持久状态的对象才会进行脏检查
1. 瞬时状态 : Java对象和数据库中的数据没有任何的关联 ( 依据OID–对象标识符来判断 ),此时Java对象的状态为瞬时状态 .
2. 持久状态 : 当对象与Session关联(oid) ,被session管理时,处于持久态; 持久态的对象拥有数据库标识(数据库中的主键) .
3. 游离状态 : 处于持久态的对象,脱离与其关联的session管理后, 对象处于游离状态 .

脏检查:session具有一个缓存,可以管理和跟踪所有持久化对象

1 . 快照: 当持久态对象被 session管理时, session会为对象的值类型的属性复制一份快照
2 . 脏对象: 当session管理的过程中, 对象的属性值发生改变, session执行检查时(脏检查),发现对象的当前属性和快照的属性不同, 那么当前对象会变成脏对象
3 . 提交: 当session 缓存中对象的属性发生变化时,并不会立即进行脏检查和执行 相对应的SQL语句, 而是在特定的时间点才会执行;
4 . 执行时机: 在默认情况下, session会在以下时间点属性缓存,执行脏检查–>发现脏对象的话,执行对应的SQL 语句
                   1.) :应用程序显式调用 Session的flush() 方法时.
                   2.) :应用程序调用 Transaction()的commit() 方法时.—>即提交事务时

原创粉丝点击