• 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();
  • 相关阅读:
    【读书笔记】【深入理解ES6】#13-用模块封装代码
    【读书笔记】【深入理解ES6】#12-代理(Proxy)和反射(Reflection)API
    【读书笔记】【深入理解ES6】#11-Promise与异步编程
    【读书笔记】【深入理解ES6】#10-改进的数组功能
    【读书笔记】【深入理解ES6】#9-JavaScript中的类
    【读书笔记】【深入理解ES6】#7-Set集合和Map集合
    【读书笔记】【深入理解ES6】#6-Symbol和Symbol属性
    关于maven打包文件不全的处理方式
    关于Dubbo的常用模型
    Dubbo源码本地运行demo遇到的问题
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/11848852.html
Copyright © 2020-2023  润新知