1.创建持久化java类(model)
1.提供一个无参的构造器(反射)
2.提供一个标识属性(OID)
映射为数据库表的主键字段
3.get/set
2.创建对象-关系映射文件
<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配置文件
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():清理缓存