第四章 Hibernate入门

第四章 Hibernate入门
4.1 框架技术
    4.1.1 框架的概念
        框架是一个提供了可重用的公共结构的半成品。
    4.1.2 主流框架
        4.1.2.1 Struts框架
        4.1.2.2 Struts2框架
        4.1.2.3 Hibernate框架
            一个优秀的持久化框架,负责简化对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。
        4.1.2.4 Spring框架
4.2 Hibernate介绍及环境搭建
    4.2.1 数据持久化概念
        数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。
    4.2.2 Hibernate框架及ORM
        4.2.2.1 Hibernate框架(数据持久化工具,对象关系映射框架)
        4.2.2.2 O<->R<->M(对象/关系映射,数据持久化技术)
    4.2.3 Hibernate框架的优缺点级使用场合
        4.2.3.1 优点
            1)Hibernate功能强大
            2)Hibernate支持许多对象多面向对象的特性
            3)可移植性好
            4)Hibernate开源免费
            适用于大中型项目
        4.2.3.2 缺点
            1)不适合以数据为中心大量使用储存过程的应用
            2)大规模的批量插入,修改和删除不适用Hibernate
            不适用小型项目,也不适用关系模型设计不合理,不规范的系统
    4.2.4 Hibernate的环境搭建
        1、下载需要的jar包
        2、部署jar包
        3、创建Hibernate配置文件hiernate.cfg.xml
            常用参数:
                connection.url:数据库URL
                connection.username:数据库用户名
                connection.password:数据库密码
                connection.driver_class:数据库驱动
                dialect:配置Hibernate使用的数据库类型
                current_session_context_class:指定currentSession()所得的session由谁来跟踪管理
                show_sql:参数为true,程序运行时在控制台输出sql语句
                format_sql:参数为true,程序运行时在控制台输出格式化后sql语句
        4、创建持久化类和映射文件
4.3 使用Hibernate完成持久化操作
    4.3.1 使用Hibernate持久化操作7大步骤
        1、读取并解析配置文件
            Configuration conf = new Configuration().configure();
            根据默认位置的配置文件的配置信息,构建Configuration对象
        2、读取并解析映射信息,创建SessionFactory对象
            SessionFactory sf = conf.buildSessionFactory();
            SessionFactory负责创建Session对象
        3、打开Session
            Session session = sf.openSession();
            Session是Hibernate持久化操作的基础
        4、开始一个事务(增删改操作必须,查询可选)
            Transaction tx = session.beginTransaction();
        5、数据库操作
            如:session.save();//保存操作
        6、结束事务
            tx.commit();//提交事务
        7、关闭session
            session.close();
    4.3.2 使用Hibernate实现按主键查询
        4.3.2.1 Object get(Class clazz,Serializable id);
            例://加载数据操作
                Dept dept=(Dept)session.get(Dept.class,new Byte("11"));
        4.3.2.2 Object load(Class theClass,Serializable id);
            例://加载数据操作
                Dept dept=(Dept)session.load(Dept.class,new Byte("11"));
        区别:如果加载数据不存在时,get()方法会返回一个NULL,但是load()方法则会抛出异常
    4.3.3 使用Hibernate实现数据库的增删改操作
        4.3.3.1 使用Hibernate实现增加
            例://持久化操作
                session.save(dept);
                //提交事务
                tx.commit();
        4.3.3.2 使用Hibernate实现修改、删除
            例1://获取要修改的对象
                Dept dept=(Dept)session.load(Dept.class,new Byte("11"));
                //修改信息
                dept.setDeptName("行政部");
                //提交事务
                tx.commit();
            例2://获取要删除的对象
                Dept dept=(Dept)session.load(Dept.class,new Byte("11"));
                //删除信息
                session.delete(dept);
                //提交事务
                tx.commit();
            增删改操作必须在事务环境中完成
4.4 Hibernate中Java对象的三种状态
    4.4.1
        瞬时状态:创建对象后,对象没有立刻持久化并没有和数据库的数据有任何关联
        持久状态:对象和Session管理,被session管理时
        游离状态:处于持久状态的对象,脱离与其关联的Session的管理后
    4.4.2 状态的转换
        4.4.2.1:瞬时状态转换为持久状态
            瞬时状态使用Session对象的save()和saveOrUpdate()保存对象后,瞬时状态转换为持久状态
        4.4.2.2:持久状态转换为瞬时状态
            持久状态使用Session对象的delete()保存对象后,持久状态转换为瞬时状态
        4.4.2.3:持久状态转换为游离状态
            持久状态使用Session对象的evict(),clear(),close()保存对象后,持久状态转换为游离状态
        4.4.2.4:游离状态转换为持久状态
            游离状态使用Session对象的update(),saveOrUpdate()保存对象后,游离状态转换为持久状态
        4.4.2.5:游离状态转换为瞬时状态
            游离状态使用Session对象的delete()保存对象后,游离状态转换为瞬时状态
4.5 脏检查及刷新缓存机制
    4.5.1   脏检查(Hibernate对session中持久状态的对象进行检测,判断对象的数据是否发生了改变,这种判断叫作脏检查)
            脏对象(状态前后发生变化的对象称为脏对象)
    4.5.2   刷新缓存机制
            1)当应用程序调用Transaction的commit()时,会调用session的刷新缓存方法flush();
            2)当程序显式调用session个的flush()方法,刷新缓存。
4.6 更新数据方法
    1)  update()--修改信息,没有OID时报错
    2)  saveOrUpdate()--同时包含保存和更新方法的功能,瞬时状态使用save();游离状态调用update();
    3)  merge()--把一个游离状态对象的属性复制到一个持久化对象中,
                 执行更新或插入操作并返回持久化的对象,如果传入瞬时对象则保存并返回其副本
  
               

posted @ 2016-09-25 18:27  LuoBaiLin  阅读(244)  评论(0编辑  收藏  举报