hibernate框架

来源:互联网 发布:mac os 壁纸 编辑:程序博客网 时间:2024/05/19 23:04
hibernate:一个全自动的ORM框架

    1. 先有一个实体类给实体类配置映射
    2. 分配置文件(orm元数据)
    3. 主配置文件必须放在src下
    4. Hibernate中实体类的创建规则
        a. 成员变量私有化 ,提供get/set方法
        b. 持久化类中提供一个无参构造器
        c. 不要使用final关键字修饰持久类与spring 整合cglib代理,cglib代理底层就是先继承持久化类
        d. 持久化类应该提供OID。
    5. Hibernate中采用面向对象的设计思想。在hibernate中分两条不同的数据主键列对应的属性就叫OID 结论就是:hibernate 如果数据库中表如果没有主键无法映射到hibernate中< id > 
二、
    1. Hibernate的主键生成策略
        a. 主键的类型
            i. 自然主键(业务字段中可以作为主键的字段叫做自然主键)
            ii. 代理主键(没有任何的业务意义,具有不重复) 如 id
        b. hibernate的主键生成策略
            i. 每条数据在存储时,主键生成规则
            ii. 自增长  MySQL(auto_increment) Oracle  序列:提供了一个自增长的值随机
            iii. native:取决于数据库的自动增长
            iv. identity:hibernate底层应用数据库本身自动增长列
            v. increment:由hibernate自己维护的自动增长
            vi. sequence:使用数据库的序列
                <id name="cust_id" >
                    <generator  class="sequence">
                </id>
                <param name="sequnce" >sequence_name</param>
            vii. Uuid:生成一个随机的字符序列      36位   String类型
                1) 使用计算机中网卡的序列号(MAC )+时间 + 32位的16进制的数
        guid 使用guid提供主键(Oracle数据库中) 他是个方法  --
        select sys_guid() from dual   随机的字符序列
        assigned:自然:保存数据的时候必须要使用set方法赋值   -   
        c. Hibernate 的好处
            i. 封装了JDBC的操作
            ii. 跨库数据库访问
            iii. ORM
                            
    2. Hibernate对象的三种状态
        a. 瞬时状态:没有ID,并且没有与session无关联
        b. 持久化状态:有ID,且与session有关联
        c. 游离状态 | 托管状态:有ID 与session无关联
        d. 三种状态的总结:持久化状态的所有变化都要同步到数据库当中
    3. hibernate的缓存
        a. 一级缓存
        b. -
        c. 快照
    4. Hibernate的批量查询
        a. 面向对象的查询方式 (QBC)
            i. 基本查询
                1) 
            ii. 聚合查询
                1) 
            iii. 分页查询
                1) 
            iv. 查询总数
                1) 
        b. HQL
            它的HQL语句是
        
        c. SQL
        
        d. OID        get   load
            
    5. 一对多建表
        a. 在多的一方设置一个外键,指一的一方的主键
        b. 实体类里
            i. 多     放置一个实体对象
            ii. 一     放置一个集合   表有多个<多的一方>
            iii. 配置文件
              多
                   <many-to-one class="" name="实体对象的属性名" column="外键的列名">
                         一       
                       <set name="实体类中set集合的属性名">
                           <key colunm="取值与上面的一样">
                        <one-to-many class="与我形成一对多关系的实体类">
                          </set>           
                        ----------
                      cascade :   all save-update delete 
                    本质:减少了代码量。     在开发中不建议使用级联删除  “慎用 ”
                     inverse: 有一方放弃维护外键关系, 
             本质:提高了hibernate操作数据库的效率 
              在一对多关系中如果想设置放弃维护关系 ,不管怎么放弃必须要有一方来维护
              而也只给一的一方放弃,因为外键字段在多的一方
    ----------------------
   多表操作之
   多对多
     
     老师      课程
     英雄       技能
     权限         用户
三、多对多
    1. 建立一个中间表有两个外键,分别关联两个表的主键
    2. 实体类的创建规则
        a. 两边的实体类中分被放置一个指向对方的集合
    3. 配置文件的写法
        <!-- 配置多对多关系 -->
        <!-- Set 中标签的属性
              table:中间表的名字
               集合级别的关联
                Fetch :
                    select:单表查询
                    join:关联查询
                    Subselect:子查询
        加载策略Lazy (是否延迟加载)
                    True    使用集合的时候加载(默认)
                    False
                    Extra   
                    即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,
                    而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,
                    才去发出查询语句加载所有对象的数据。
                    
                key
              column:外键 别人引用“我”的外键列名
              many-to-many:
                       class:我与哪个类是多对多关系
                          column:外键,我引用别人的外键列名
            
           -->
         <!-- 
              inverse
                  true : 放弃维护
                  false(默认):自己维护
              结论:再将来开发中,荣国遇到多对多关系,一定要选择一方放弃维护外键关系
              一边来说放弃要看业务方向,例录员工时,需要为该员工设置一个所属的角色那么
              业务方向就是有员工来维护角色,角色不需要维护与员工的关系
         -->
    4. SVN  版本控制工具
        a. 代码整合 (共享的文件夹)
        b. 代码备份
        c. 追究责任
原创粉丝点击