Hibernate_Notes_2_helloworld_详解_及session一级缓存

来源:互联网 发布:js对话框图片 编辑:程序博客网 时间:2024/06/04 19:36

1.创建持久化java类(model)

1.提供一个无参的构造器(反射)

2.提供一个标识属性(OID)

映射为数据库表的主键字段

3.get/set


2.创建对象-关系映射文件

拓展名:.hbm.xml

<class name="com.test.hibernate.helloword.News" table="NEWS"> //table=创建的表名
<id name="id" type="java.lang.Integer">            <column name="ID" />            <!-- 指定主键的生成方式,native:使用数据库本地方式 -->            <generator class="native" />        </id>
<property name="title" type="java.lang.String"> //name是model里的属性名 type类型            <column name="TITLE" /><span style="white-space:pre"></span>//列名        </property>

3.创建Hibernate配置文件

文件:hibernate1已经详解

3.通过API编写访问数据库的代码(重点)

1.Configuration类负责管理Hibernate的配置信息(加载cfg.xml)

1)创建Configuration的方式

推荐使用XML文件方式

Configuration cfg = new Configuration().configure();

以上默认识别 /hibernate.cfg.xml

其他方法:查

2)SessionFactory接口

一旦构造完毕,即被富裕特定的配置信息

 是生成Sesisson的工厂

构造sf很消耗职员,一般情况下一个应用只初始化一个sf对象

Hibernate4新郑了serviceRegistry接口,所有基于h的配置或者服务都必须统一向这个sr注册

3)主要是以下步骤

<span style="white-space:pre"></span>//1.创建一个sessionFactory对象SessionFactory sessionFactory = null;
<span style="white-space:pre"></span>//创建configuration对象Configuration configuration = new Configuration().configure();
<span style="white-space:pre"></span>//创建serviceRegistry对象ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
<span style="white-space:pre"></span>//创建sessionfactory对象sessionFactory = configuration.buildSessionFactory(serviceRegistry);
2.session接口

取得持久化对象的方法:get()/load()

持久化对象都得保存,更新和删除:

save(),update(),delete()

管理session的方法:isOpen(),flush(),clear()..等等

3.Transaction事务

Transaction tx = session.beginTransaction();

常用方法commit();等

4.session操纵对象详解

session一级缓存

可以减少Hibernate应用程序访问数据库的频率


flush():使数据表中的记录和session缓存中对象的状态保持一致,为了保持一致,则可能会发送对应的sql语句(一样就不发送)

1.在Transaction的commit()方法中:先调用session的flush方法,再提交事务

2.flush() 方法可能会发送sql语句,但不会提交事务(为了缓存与数据库保持最新的一致),

3.在未提交事务或显式的调用session.flush()方法之前,也有可能会进行flush()操作

1)执行hql或者qbc查询,查询要求是最新的状态,这样必须要先flush(),以得到数据表的最新的记录

2)若记录的ID是由底层数据库自增的方式生成的,则在调用save方法后,就会立即发送insert语句

因为save方法后,必须保证对象的ID是存在的!


refresh():数据库——>缓存 更新 会发送一条select语句(不过有数据库的隔离级别 需要设置)

会强制发送select语句,以使session缓存中的状态和数据表中记录保持一致!

<property name="connection.isolation">2</property>

clear():清理缓存

0 0
原创粉丝点击