Hibernate。Hibernate通过Configuration的实例加载配置文件信息,然后读取指定对象关系映射文件的内容并创建SessionFactory实例。
SessionFactory接口
负责初始化Hibernate。一个SessionFactory实例对应一个
数据库。应用程序从SessionFactory中获得Session实例。
Session接口
Session被称为持久化管理器,负责管理与持久化相关的操作:存储、更新、删除和加载对象。
Transaction接口
是Hibernate框架的事务接口。它对底层的事务接口做了封装。包括:JDBC API和JTA。
2. Session的缓存(一级缓存)
Session的CRUD方法以及调用查询接口的list(),iterate()方法时,如果session缓存中不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中,如果session缓存中已经存在这个对象,就不需在去数据库加载,而直接使用缓存中的对象。
flush: 进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步 执行一些列sql语句,但不提交事务,;
commit:先调用flush() 方法,然后提交事务. 则意味着提交事务意味着对数据库操作永久保存下来。
session的缓存一般交由hibernate框架自动管理。
3. Session的几个主要方法
1)、save保存数据,相当于insert方法
2)、delete,删除对象
3)、update,更新对象,如果数据库中没有记录,会出现异常。
4)、get,根据ID查,会立刻访问数据库。
5)、Load,根据ID查,(返回的是代理,不会立即访问数据库)。
6)、saveOrUpdate (根据ID和version的值来确定是save或update
4.主键id的属性值:取值标示符取值器
注:increment是my
sql数据库,identity是oracle数据库,Sequence是sql server;最常用的是native,因为该属性可以自行判断是什么数据库而只能的调用相应数据库标示符
5. 一个运用hibernate写的增删改查例子
[java] view plaincopy
自己手动编写的一个工具类 Hibernate.java
package com.hbsi.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Session session;
static{
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
session = factory.openSession();
}
public static Session getSession(){
return session;
}
public static void close(){
if(session!=null){
session.close();
}
}
}
增删改查类 UtilTest.java:
package com.hbsi.test;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.Test;
import com.hbsi.domain.User;
import com.hbsi.utils.HibernateUtil;
public class UtilTest {
@Test
public void addUser(){
User user = new User();
user.setName("lisi");
user.setBirthday(new Date());
try{
Session session = HibernateUtil.getSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
}finally{
HibernateUtil.close();
}
}
@Test
public void deleteUser(){
try{
//方法一:先查找,再操作
/*Session session = HibernateUtil.getSession();
session.beginTransaction();
User user = (User)session.get(User.class, 1);
session.delete(user);
session.getTransaction().commi