hibernate 数据操作流程

来源:互联网 发布:淘宝助理 csv excel 编辑:程序博客网 时间:2024/06/06 04:25

1.hibernate中的5个核心接口:

Configuration接口:

Configuration接口负责配置并启动Hibernate

创建SessionFactory对象

在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、
读取配置,然后创建SessionFactory对象。

SessionFactory接口:

SessionFactroy接口负责初始化Hibernate

负责创建Session对象

需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,
当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

Session接口:类似于connection对象

负责执行被持久化对象的CRUD操作

Hibernate的session不同于JSP应用中的HttpSession

Transaction接口:

Transaction接口负责事务相关的操作

Query和Criteria接口:

Query和Criteria接口负责执行各种数据库查询

添加数据:

@Test
public void save() {
TUser user= new TUser();
user.setUsername("笑傲江湖4");
user.setRealname("笑傲江湖");
user.setPassword("111");

//1读取配置文件 
Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
//2 获取session工厂   
// SessionFactory sf= cfg.buildSessionFactory(); 旧版本过时 不推荐使用
//
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).
buildServiceRegistry();
SessionFactory  sf = cfg.buildSessionFactory(serviceRegistry);
//3 打开 sessiuon 
Session session= sf.openSession();
//4 打开事物 
Transaction transaction = null;
try {
transaction=session.beginTransaction();
//返回主键的id
Serializable id = session.save(user); //保存 将数据提交到数据库
System.out.println(id);
transaction.commit();//提交回滚 数据保存到数据库
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally{
//5 关闭事物
session.close();
}
修改数据:

/**
*  根据主键id更新所有字段
*/
@Test
public void update(){
TUser user=new TUser();
user.setUserid(38);
user.setUsername("abdddf");
//1 读取配置文件
Configuration cfg= new Configuration().configure("hibernate.cfg.xml");
//2 获取session 工厂
ServiceRegistry serviceRegistry =new ServiceRegistryBuilder().applySettings(cfg.getProperties()).
buildServiceRegistry();
SessionFactory sf=cfg.buildSessionFactory(serviceRegistry);
//3  打开 session
Session session=sf.openSession();
//4 打开事物
Transaction transaction =null;
try {
transaction=session.beginTransaction();
//保存到数据库
session.update(user);
//提交回滚
transaction.commit();
} catch (Exception e) {
//  提示错误信息
transaction.rollback();
e.printStackTrace();
}finally{
//5 关闭事物
session.close();
}

如图:


删除数据:注意:根据主键删除数据,即使对象中有其他数据也不会作为删除条件

注意:执行的步骤要搞清楚,面试的时候问hibernate的执行流程就是这5个步骤!!!

/**
* 根据主键id删除字段
*/
@Test
public void delete(){
TUser user =  new TUser();
user.setUserid(38);

 user.setUsername("诸葛亮");  //不作为删除数据的条件
//1 读取配置文件
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
//2 获取session 工厂
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
applySettings(cfg.getProperties()).buildServiceRegistry();
//cfg.buildSessionFactory(serviceRegistry);
SessionFactory sf=cfg.buildSessionFactory(serviceRegistry);
// 3 打开session
Session session = sf.openSession();
//4 打开事物
Transaction transaction = null;
try {
//
transaction =session.beginTransaction();
//保存到数据库  执行对应的方法   根据id执行删除操作
session.delete(user);
//提交和回滚
transaction.commit();
} catch (Exception e) {
//  提示对应的错误信息
transaction.rollback();
e.printStackTrace();
}finally{
// 5 关闭事物
session.close();
}
}

如图:



3.在控制台显示执行的SQL语句操作:

在hibernate.cfg.xml  文件中选择Configuration   下图