• Hibernate(二)之Hibernate-api详解


    一、Hibernate体系结构

      

    二、Hibernate-api详解

      2.1、Configuration配置对象

        Configuration是用来加载配置文件的

       我们Hibernate中主要有两个配置文件,第一个是核心的配置文件,第二个是映射文件。

        

      2.2、SessionFactory工厂

        SessionFactory 相当于java web连接池,用于管理所有session
        获得方式:config.buildSessionFactory();
        sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
        SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题。

        

        SessionFactory与连接池的区别

          

        getCurrentSession()方法

        

      2.3、session对象

        用来操作数据库的。Sesion相当于JDBC中的Connection。我们通过session操作PO对象实现增删改查。

        2.3.1、增

          

        2.3.2、改  

          

        2.3.3、删

          

        2.3.4、查

          A.使用session中的get方法查询

          

        结果:

        B.使用session中的load方法

          load方法.返回一个代理对象,获得其内容时,会查询数据库,是每次访问属性都会查询数据库吗?

            答:不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过. 

          代理都是要基于接口的,用load方法返回的代理,就没有实现任何接口? 

            答:java中的动态代理是基于接口. 而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的.

               该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口.

        

        出现bug:

        分析:get和load的执行原理

          

        C.使用HQL语言查询数据库中表的所有记录

        

        D.使用Criteria查询所有数据库

        

        E.使用原生的SQL语句查询

        

        2.3.5、总结

        在增删改查中我们学习的方法有    

         session.save();
         session.update();
         session.delete();
         session.get();
         session.load(); 对比get
         session.createQuery();
         session.createCritieria();
         session.createSqlQuery();

      2.4、Transaction对象

          Transaction封装了事务的操作

           一般事务的操作中有:

              开启事务  beginTransaction()

              获得事务  getTransaction()

              提交事务  commit()

              回滚事务  rollback()

          

        细节处理

          

              从这里中我们使用getCurrentSession()方法获得一个事务,当你没有关闭这个事务的时候,

              当你再次获取事务,它们属于同一个事务。

      2.5、Query对象

        Query对象封装了HQL语句对象,且封装了查询的细节

        

      2.6、Criteria对象(了解)

        

        使用like查找

          

        一些基本的查询条件查询

        

      2.7、工具类

        我们知道在使用hibernate进行增删改查的时候都要获取到session,这导致代码的重用性很强,所以我们可以

        创建一个工具类去解决这个问题。   

    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.classic.Session;
    
    //完成Hibernate工具类
    //封装配置文件读取操作
    //封装Sessionfactroy创建操作
    //封装session获得操作
    public class HibernateUtils {
    
        private static SessionFactory sf;
        
        static{
            //1加载配置
            Configuration  conf = new Configuration().configure();
            //2 根据Configuration 配置信息创建 SessionFactory
            sf = conf.buildSessionFactory();
            //
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
                
                @Override
                public void run() {
                    System.out.println("虚拟机关闭!释放资源");
                    sf.close();
                }
            }));
            
        }
        
        public static org.hibernate.Session  openSession(){
                    
                    //3 获得session
                    Session session = sf.openSession();
                    
                    return session;
        }
        
        public static org.hibernate.Session  getCurrentSession(){
            //3 获得session
            Session session = sf.getCurrentSession();
            
            return session;
        }
        
    }

        

        

      

         

            

      

       

            

  • 相关阅读:
    Linux04:压缩与解压
    Linux03:基本权限与初始权限
    Linux02:基本命令、查看文件、链接命令
    Linux01:虚拟机配置与系统安装
    分库分表和数据库分片方案
    mysql的锁
    redo log和undo log、事务
    Android : 代码多维度管理(产品风味)
    Android : 网络adb配置及有线端口占用解决方法
    Linux学习: 触摸屏驱动
  • 原文地址:https://www.cnblogs.com/cxyzyh2017/p/6673089.html
Copyright © 2020-2023  润新知