hibernate学习笔记(一)
- Junit 的使用
- Session 一级缓存
Junit 的使用
Junit 单元测试提供了三种配置测试,分别是@Before,@Test,@After。举个例子
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){
//1.) 创建Configuration 对象:对应hibernate 的基本配置信息 和对应关系映射信息
Configuration configuration = new Configuration().configure(); //默认关联 configure( "/hibernate.cfg.xml" );
//2.) 创建一个ServiceRegistry 对象,hibernate 的任何配置和服务都需要在该对象中注册后才能有效。
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2. 创建Session 对象
session = sessionFactory.openSession();
//3. 开启事务
transaction = session.beginTransaction();
}
@Test
public void test() {
//4. 执行操作
News news = new News("java", "testAuthor", new Date(new java.util.Date().getTime()));
session.save(news);
}
@After
public void destory(){
//5. 提交事务
transaction.commit();
//6. 关闭Session 对象
session.close();
//7. 关闭SessionFactory 对象
sessionFactory.close();
}
Session 一级缓存
- Session 是Hibernate 向应用提供操作数据库最主要的接口,它提供了基本保存,更新,删除和加载Java 对象的方法。
- 站在持久化的角度,Hibernate 把对象分为四种状态:持久化状态,临时状态,游离状态,删除状态。Session 提供方法可将对象的状态转化。
- Session 接口的实现中包含了一系列的Java 集合,而这些集合构成了Session 缓存,只要Session 没有结束生命周期或没有手动清理缓存,Session 缓存就会一直存在。
操作Session 缓存的三种方法
flush()
- flush: 使数据表中的记录和 Session 缓存中的对象的状态保持一致. 为了保持一致, 则可能会发送对应的 SQL 语句。
- 在 Transaction 的 commit() 方法中: 先调用 session 的 flush 方法, 再提交事务
- flush() 方法会可能会发送 SQL 语句, 但不会提交事务。
- 注意: 在未提交事务或显式的调用 session.flush() 方法之前, 也有可能会进行 flush() 操作.
- 1). 执行 HQL 或 QBC 查询, 会先进行 flush() 操作, 以得到数据表的最新的记录
- 2). 若记录的 ID 是由底层数据库使用自增的方式生成的, 则在调用 save() 方法时, 就会立即发送 INSERT 语句.
- 因为 save 方法后, 必须保证对象的 ID 是存在的!
reflesh()
- refresh(): 会强制发送 SELECT 语句, 以使 Session 缓存中对象的状态和数据表中对应的记录保持一致!
clear():清理缓存