JavaWeb_(Hibernate框架)Hibernate中重要的api

 

 

Hibernate中重要的api

  • Configuration
  • SessionFactory
  • Session(重点)
  • Transaction

  

 

  在Dao层中UserDao.java使用Hibernate向数据库中添加注册的用户

    public void addUser(User user) {
        
        //使用Hibernate
        //得到配置信息
        Configuration config = new Configuration().configure();
        //创建sessionFactiory对象
        SessionFactory sessionFactory = config.buildSessionFactory();
        //获取session
        Session session = sessionFactory.openSession();
        
        //打开事务
        Transaction transaction = session.beginTransaction();
        
        //存储User对象
        session.save(user);
        
        //提交事务
        transaction.commit();
        
        //关闭资源
        session.close();
        
    }

 

 

Configuration:管理我们的配置文件的信息的

  //使用Hibernate(并没有去读取hibernate.cfg.xml)
  Configuration config1 = new Configuration();    
        
  config1.configure();

  在Hibernate底层实现configure()方法时会默认在classpath下面(即从src目录下开始查找)寻找hibernate.cfg.xml,并进行配置,当然也可以自己指定hibernate.cfg.xml文件位置:

configuration.configure("/com/db/hibernate.cfg.xml");

  configure()方法源码:

    public Configuration configure() throws HibernateException {
        return configure( StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME );
    }

  

  DEFAULT_CFG_RESOURCE_NAME静态String在StandardServiceRegistryBuilder有定义

 

public static final String final String DEFAULT_CFG_RESOURCE_NAMEDEFAULT_CFG_RESOURCE_NAME = "hibernate.cfg.xml";

 

 

  所以src下hibernate.cfg配置文件名字不要写错,如果有修改,要与StandardServiceRegistryBuilder.java中的final String DEFAULT_CFG_RESOURCE_NAME一一对应

 

 

SessionFactory:创建session(数据库核心对象)的工厂

  简单来说就是创建session对象

  sessionFactory负责保证和使用所有的配置信息,消耗内存资源很大,所以我们要保证一个web项目中,只创建一个sessionFactory

Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:

Hibernate 运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
持久化类与数据表的映射关系(*.hbm.xml 文件)

 

  Session对象的增、删、改、查

  //增加用户
    public void addUser(User user) {
        
        //使用Hibernate(并没有去读取hibernate.cfg.xml)
        Configuration config1 = new Configuration();    
        config1.configure();
        
        //得到sessionFactory  功能:创建session(数据库核心对象)的工厂
        //        简单来说就是创建session对象
        //sessionfactory负责保存和使用所有配置信息,消耗内存和资源大
        //        线程安全
        //        保证一个web项目中,只创建一个
        SessionFactory factory = config1.buildSessionFactory();
        //创建session对象
        Session openSession = factory.openSession();
        
        //得到配置信息
        Configuration config = new Configuration().configure();
        //创建sessionFactory对象
        SessionFactory sessionFactory = config.buildSessionFactory();
        //获取session
        Session session = sessionFactory.openSession();
        
        //打开事务
        Transaction transcation = session.beginTransaction();
        //存储user对象
        session.save(user);
        //关闭事务
        session.close();
    }

    
    //删除用户
    public void deleteUser()
    {
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        Session session = factory.openSession();
        Transaction transcation = session.beginTransaction();
        //得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象
        User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        session.delete(user);
        transcation.commit();
        session.close();
    }
    
    
    //修改用户
    public void ChangeUser()
    {
        //读取hibernate.cfg.xml
        Configuration config = new Configuration().configure();
        //获取sessionFactory工厂
        SessionFactory factory = config.buildSessionFactory();
        //获取session
        Session session = factory.openSession();
        //开启事务
        Transaction transaction = session.beginTransaction();
        //根据id,得到session
        User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        //修改名字,将对象改名为lGary
        user.setUsername("lGary");
        //更新数据库中的值
        session.update(user);
        //提交事务
        transaction.commit();
        //关闭session
        session.close();
    }
    
    
    //查询用户
    public void findUser()
    {
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        Session openSession = factory.openSession();
        Transaction transaction = openSession.beginTransaction();
        User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        System.out.println(user);
        transaction.commit();
        openSession.close();
    }

 

package com.Gary.dao;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.Gary.domain.User;

public class UserDao {


    //增加用户
    public void addUser(User user) {
        
        //使用Hibernate(并没有去读取hibernate.cfg.xml)
        Configuration config1 = new Configuration();    
        config1.configure();
        
        //得到sessionFactory  功能:创建session(数据库核心对象)的工厂
        //        简单来说就是创建session对象
        //sessionfactory负责保存和使用所有配置信息,消耗内存和资源大
        //        线程安全
        //        保证一个web项目中,只创建一个
        SessionFactory factory = config1.buildSessionFactory();
        //创建session对象
        Session openSession = factory.openSession();
        
        //得到配置信息
        Configuration config = new Configuration().configure();
        //创建sessionFactory对象
        SessionFactory sessionFactory = config.buildSessionFactory();
        //获取session
        Session session = sessionFactory.openSession();
        
        //打开事务
        Transaction transcation = session.beginTransaction();
        //存储user对象
        session.save(user);
        //关闭事务
        session.close();
    }

    
    //删除用户
    public void deleteUser()
    {
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        Session session = factory.openSession();
        Transaction transcation = session.beginTransaction();
        //得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象
        User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        session.delete(user);
        transcation.commit();
        session.close();
    }
    
    
    //修改用户
    public void ChangeUser()
    {
        //读取hibernate.cfg.xml
        Configuration config = new Configuration().configure();
        //获取sessionFactory工厂
        SessionFactory factory = config.buildSessionFactory();
        //获取session
        Session session = factory.openSession();
        //开启事务
        Transaction transaction = session.beginTransaction();
        //根据id,得到session
        User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        //修改名字,将对象改名为lGary
        user.setUsername("lGary");
        //更新数据库中的值
        session.update(user);
        //提交事务
        transaction.commit();
        //关闭session
        session.close();
    }
    
    
    //查询用户
    public void findUser()
    {
        Configuration config = new Configuration().configure();
        SessionFactory factory = config.buildSessionFactory();
        Session openSession = factory.openSession();
        Transaction transaction = openSession.beginTransaction();
        User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
        System.out.println(user);
        transaction.commit();
        openSession.close();
    }
    
}
UserDao.java

 

 

Transaction:事务

1、hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。

2、如果想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。(注意:通常并不推荐这样做)

        //打开事务
        Transaction transcation = session.beginTransaction();

        //关闭事务
        session.close();

 

 

 

 

 

posted @ 2019-11-13 14:39  Cynical丶Gary  阅读(165)  评论(0编辑  收藏  举报