hibernate 框架体系

Hibernate 框架体系
  ORM对象关系映射
    实践步骤
      1、先创建log4j.properties日志的处理以及消息处理
      2、再创建hibernate.cfg.xml,并将注册JDBC相关连接
      3、创建一个javabean对象,指定相应的属性值,并创建一个有参与无参的构造方法
      4、完成javabean对象的注册,创建一个user.hbm.xml
      5、再次到hibernate.cfg.xml里注册
      6、再次完成自动创建表
      7、创建一个类完成数据的增删改
      备注:拷相应的驱动包
    hibernate核心接口
      1、Configuration接口:用于hibernate配置,在hibernate启动过程中,Configuration接口实现类首先定位映射文档的相应配置
      2、SessionFactory接口:用来产生session对象,一个SessionFactory对象代表一个数据库,在内存中能被共享,用它来得到不同的session对象
      3、Session接口:提供了对数据库持久对象进行操作的方法
      4、Transaction接口:在hibernate轻量级框架中,不依赖容器
      5、Query和Criteria接口:Query方便对数据库及持久对象进行查询;Criteria与前者类似,它允许创建并执行面向对象的标准化查询
  hibernate体系
    特点
      1、一种开发源代码对象/关系映射框架数据库的OR映射事务管理
      2、生命周期不依赖容器(J2EE容器)
    优点
      1、只需要操作对象即可完成数据的增删改查等操作
      2、面向对象将对象数据保存在数据中将数据库读入到对象镇南关
      3、轻量级、无侵入、移植性好
      4、拥有事务管理
    缺点
      容易造成性能问题,不适合用于批量操作
    应用范围
      针对每个对象简单查询出来,对其进行编辑、修改;而不适用于很多对象进行批量操作
    不适用范围
      1、批量操作
      2、数据库特定映射
      3、表与表之间复杂关系
    三种状态
      1、瞬时状态:当实例化一个持久化对象后,该对象处于瞬时状态;eg:UserBean bean = new UserBean("moth","123","www.mothsky.com");
      2、持久状态:数据库中有相关记录,而且保证对象与记录是一致的;eg:session.save(bean)
      3、游离状态:当hibernate中session关闭后,数据库有相关记录,但该对象不受session管理
    主键生成策略
      1、icrement:只有在没有其他进程往同一个表中插入数据时才能使用,由hibernate控制数据库中相应字段设置自动增长,不能集群
      2、identity:支持标识字段的数据库MySQL、DB2,兼容性较高
      3、sequence:对于内部支持序列的数据库
      4、hilo:使用一个高/低位算法的生成int、long、short 类型的标识符
      5、uuid:用一个128-bit的UUID算法生成字符串类型的标示符,UUID被编码为一个32位16进制数字的字符串
      6、native:自动根据低层数据库的能力选择identity、sequence或者hilo中的一个
      7、assigned:让应用程序在保存前为对象分配一个标示符,这是<generator>元素没有时默认生成
      8、select:通过触发器选择一些唯一主键的行并返回主键值来分配一个主键
      9、foreign:使用另外一个相关联对象的标示符
    hibernate查询
      1、OID查询
        session接口
          get与load的区别
            get:
              得到实体bean对象,立即加载,当主键对应的记录不存在时,返回null
            load:
              得到实体bean对象(由cglib产生的代理子类 )延迟加载(懒加载,只有使用该对象或该对象属性时,才会真正发出SQL)
              一般用于二级缓存,减少性能的消耗
          实例:
            UserBean bean = (UserBean)session.get(UserBean.class,new Integet(1))
            UserBean bean = (UserBean)session.load(UserBean.class,new Integet(1))
      2、HQL查询
        概述:是一种面向对象的查询语言(广泛使用)
          eg: from 对象
          注:HQL语句本身大小写无关,但是其中出现的的类名和属性名必须注意大小写区分
        动态绑定参数
          eg: Query query = session.createQuery("from UserBean");
          query.setString("name","tiger") 类似还有setFirstReslut,setMaxReslut等
          List list = query.list()
        HQL查询步骤
          1、通过Session的CreateQuery()方法创建一个Query对象
          2、动态绑定参数
          3、调用Query对象的list()方法执行查询语句
      3、迭代iterator与list
        iterator:
          优点:二级缓存,如果缓存区存在,可直接查询数据
          缺点:发出n+1条SQL语句(先查出所有ID,再根据每一个id来一句一句查询SQL语句)
        list
          优点:只查询一条SQL语句
      4、比较运算
        Criteria c = session.createrCriteria(UserBean.class)
        c.add(Expression.gt("name","moth")) 注:gt::大于 ; lt:小于
        范围运算符
          in,not in,betwwen and, not between and
      5、聚合函数与分组查询
        count:统计
        min和max:最小与最大值
        sum:总和
        avg:平均数
  hibernate关系映射
    hibernate对象识别
      1、采用OID(Object Identifier)对象标识符
      2、OID是关系数据库中的主键在java对象模型中的表现(对象与对象的对应关系)
    集合映射
      1、set映射
        为了避免重复记录采用hashset集合
      2、list映射
        list允许重复记录
        该映射集合返回的是一个Object数组(下标字段)
    关联关系映射
      1、一对一(主键关联)
        a、两个表中的主键是一一对应,一个表的主键参照另一个表的主键的建立,一个表中的主键同时又是另一个表的外键
        b、让两个表的id相同,数据不需额外添加字段
      2、一对一(唯一外键关联)
        a、主表一方有从表一方的外键
        b、是多对一关联映射的特例
    hibernate关系映射第二讲(多对多)
      多对一关联
        概述:在类与类的关联中,eg: 订单与客户,多个订单属于一个客户
        配置:<many-to-one name="UserBean" column="user_id">
          注:a、column属性指定的是订单表的外键user_id
      级联
        1、在级联下,只删除主表内容,不删从表相关信息
          a、ClassBean classBean = (ClassBean)session.get(ClassBean.class,1)
          b、classBean.setStudent().clear() 清空主表中的集合
          c、sessio.delete()  删除主表中的记录
        2、何时使用级联
          在多对一关系中,多方可能会有多条记录对应一方的一条记录,所以在添加、删除、更新多方操作,不需要级联操作
          注:在删除主表时,先清除主从关系,在删除主表
      inverse与cascade区别
        inverse
          1、表与表之间的外键由谁来维护
          2、当inverse="true"时,由另一张表(对方)来维护,反之则为本身来维护
          3、优化:插入数据时,不发出修改的SQL语句,提高了性能
        cascade
          1、cascade="all(级联所有的数据)/none(不采用级联)/delete(当删除时采用级联)//"
          2、有数据库来维护
      多对多关联
        1、实例:顾客与服务员
        2、多对多通常在数据库中则要使用中间表来维护多对多的关系
        3、配置
          步骤:
            a、首先建顾客表、服务员表与中间表(桥梁关系)
            b、创建顾客与服务员对象(互相设置对方对象彼此的Set集合)
            c、配置顾客与服务员的xml
              <set 配置>
              <many-to-many  class="……" column=“要提交中间表中对应的列名”>
  Hibernate缓存
    实质
      1、充当数据库在内存中一个临时容器内存空间
      2、避免了数据库调用性能的开销
      3、相对内存操作而言,数据库调用时一个代价高昂的过程
      4、位于数据库与数据库访问中间层
    持久层缓存范围
      1、事务缓存(一级缓存):
        内部缓存由hibernate自动维护,随session创建而创建,销毁而销毁
      2、应用级缓存(二级缓存):
        由sessionFactroy 的生命周期控制
      3、分布式缓存(集群):
        JBossCache作为分布式缓存
    查询缓存与一、二级缓存区别:
      1、一、二级缓存只能缓存实体对象
      2、查询缓存查询的是结果集,即可以缓存普通属性依赖于二级缓存
    延迟加载:
      先获取主表中主键的集合
      eg:1、ClassBean bean = (ClassBean)session.get(ClassBean.class,1)
      2、bean.getStudentBean().iterator()再次获得遍历集合
      3、如果控制延迟加载:lazy="false"
  悲乐观锁
    悲观锁:
      1、数据本身由SQL来实现,一般用于端事务操作
      2、只有MySql支持
    乐观锁:
      1、针对版本的控制
      2、配置:
  数据库隔离级别
    1、Read Uncommited 没有提交,就能读到
    2、Read Commited:提交读,提交后才可更新数据
    3、Repeatable:可重复读
    4、serializable :可序列化读,事务只能一个接一个执行,不能并发执行
  连接池与C3P0连接池的使用
    连接池概念:为了释放资源,合理的分配与释放,可以有效提高连接的复用度,从而降低新连接的开销,同时加快用户访问速度
    C3P0概念:
      1、checkout == 从池中取得可用连接;checkoutconnection ==被使用连接;checkin==把链接放回池中;checkinconnetion==没有被使用的连接;pooledconnection管理连接
      2、行为:生成一个connection,当池中connection没有达到最大数,当有请求出现,将会产生connection;生成一个pooledconneticon
  iBATIS应用
    特点
      1、ibatis是一种持久层框架,也属于ORM映射
      2、相比hibernate为全自动化,配置文件书写之后不需要书写sql语句,但缺乏灵活性
      3、半自动化,需要自己写SQL语句,需要手动定义映射,但设计上灵活,并支持hibernate的一些特殊,比如:延迟、缓存等
      4、对数据库来说hibernate性能较差,移植性不好,但可以编写灵活与高性能SQL语句
    组成体系
      1、核心框架
        SQL Map
      2、配置文件
        sqlMapConfig.xml类似于hibernate.hmp.xml
      3、多类配置文件
        sqlMap.xml 相当于hibernate中的映射文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值