• hibernate工具类HibernateUtil详解


     1.为什么要用hibernateUtil这个类,先看这段代码:

        //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他
         Configuration config = new Configuration();
         config.config();
         //创建工厂
         SessionFactory factory = config.bulidSessionFactory();
         //得到session
         Sesssion session  = factory.opensession();
         //创建对象
         这些代码是非常耗时的,我们希望它只做一次,一般我们希望它只做一次,我们去做一个工具类去初始化hibernate。工具类一般不希望被继承,别人来改写我的东西,一般用finally
         
         public finally HibernateUtil(){
           private static SessionFactory sessionFactory=null;
           //私有的构造方法,防止别人new出来,典型的单例设计模式的引用
            priavate HibernateUtil(){
                }
            static {
      Configuration cfg = new Configuration();
      cfg.configure();
      sessionFactory = cfg.buildSessionFactory();
     }  
        public static SessionFactory getSessionFactory() {

          return sessionFactory;
     }

     public static Session getSession(){
      return  sessionFactory.openSession();
       }

       cfg.configure()这句话就会去读hibernate.cfg.xml里面的配置文件.如果你的配置文件不叫hibernate,cfg.xml,你就要用cfg.configure("filename")来指定你需要的配置文件。我们可以查看源代码。在使用cfg.configure()时:

     public Configuration configure() throws HibernateException {
      configure( "/hibernate.cfg.xml" );
      return this;
     }

    会把hibernate.cfg.xml传进去,eclipse会在哪里去找这个hibernate.cfg.xml这个文件呢?会在classpath中去找这个文件。src这个目录不是classpath,但是它为什么可以找的到呢?因为scr目录最终都会编译到classpath中去。session就类似与jdbc的connection.

         ibernate 中先对来说比较规范的一个添加一个对象的写法

     static void addPerson(Person person) {
      Session session = null;
      Transaction tx = null;
      try {
       session = HibernateUtil.getSession();
       tx = session.beginTransaction();
       session.save(person);

      } catch (HibernateException e) {
       if (tx != null)
        tx.rollback();
       throw e;  //这个时候最好是把异常抛出去,因为如果只是回滚的话,就没有任何提示给调用者。注意异常的处理,如果不抛出的话,因隐藏错误
      } finally {
       session.close();
      }

     
     
     
        }
  • 相关阅读:
    Zabbix二次开发_03api列表
    Zabbix二次开发_02获取数据
    Zabbix二次开发_01基础
    运维监控体系
    并发检测主机ip存活脚本
    Python的paramiko模块ssh操作
    Oracle数据迁移expdp/impdp
    Mongodb的备份与恢复
    利用微信小程序实现web监控界面
    不会JS中的OOP,你也太菜了吧!(第二篇)
  • 原文地址:https://www.cnblogs.com/tian830937/p/4435944.html
Copyright © 2020-2023  润新知