A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 程madman 中级黑马   /  2018-1-8 20:45  /  701 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        1. 持久化类概念:
                a. PO(persistent object)持久化类
                        i. Po=pojo+hbm
                b. hibernate中的po编写规则
                        i. 必须提供一个无参数的public构造
                        ii. 所有属性要private,对外提供public的get/set方法
                        iii. 在po类必须提供一个标识属性,让它与数据库的主键对应,管这个属性叫OID
                        iv. PO类中的属性尽量使用基本数据类型的包装类
                                1) Int-->integer double-->Double
                        v. po类它不能使用final修饰符
                                1) OID作用
                                        a) OID值的是与数据库中标的主键对应的属性
                                        b) hibernate框架它是通过OID来区分不同的po对象如果在内存中有两个相同的OID对象,namehibernate人为它是一个对象
                                2) po类中的属性使用数据类型包装类的原因
                                        a) 基本数据类型的没有办法描述不存在的概念,使用包装类对象,对于对象他的默认值是null
                                3) po类不能使用final修饰符的原因(hibernate查询方法的get/load方法区别)
                                        a) Get/load方法都是根据id进行查询对象,
                                                i) get直接得到了一个持久化的对象,它是立即执行查询操作,,,,load方法得到的是持久化类的的代理类型对象,它采用的是延迟策略来查询数据
                                                ii) get方法在查询是,如果不存在返回null,,,load方法在查询是,如果不存在,会产生异常
        2. 主键生成策略:
                a. hibernate中定义的主键类型包括:自然主键和代理主键
                        i. 自然主键:----具有业务含义 字段 作为主键,比如:学号、身份证号
                        ii. 代理主键:----不具有业务含义 字段作为主键(例如 自增id),比如:mysql自增主键,oracle序列生成的主键、uuid()方法生成的唯一序列串
                        建议:企业开发中使用代理主键!
                b. 主键生成器         描述
                increment        代理主键。由hibernate维护一个变量,每次生成主键时自动以递增。
                        问题:如果有多个应用访问一个数据库,由于每个应用维护自己的主键,所以此时主键可能冲突。建议不采用。
                        优点:可以方便跨平台
                        缺点:不适合高并发访问
                identity        代理主键。由底层数据库生成表识符。条件是数据库支持自动增长数据类型。比如:mysql的自增主键,oracle不支持主键自动生成。
                        如果数据库支持自增建议采用。
                        优点:由底层数据库维护,和hibernate无关
                        缺点:只能对支持自动增长的数据库有效,例如mysql
                sequence        代理主键。Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列。比如oracle的序列。
                        如果数据库支持序列建议采用。
                        优点:由底层数据库维护,和hibernate无关
                        缺点:数据库必须支持sequence方案例如oracle
                native        代理主键。根据底层数据库对自动来选择identity、sequence、hilo
                        由于生成主键策略的控制权由hibernate控制,所以不建议采用。
                        优点:在项目中如果存在多个数据库时使用
                        缺点:效率比较低
                uuid        代理主键。Hibernate采用128bit位的UUID算法来生成标识符。该算法
                        能够在网络环境中生成唯一的字符串标识符。
                        此策略可以保证生成主键的唯一性,并且提供了最好的数据库插入性能和数据库平台的无关性。建议采用。
                        优点:与数据库无关,方便数据库移植,效率高,不访问数据库就可以直接生成主键值,并且它能保证唯一性。
                        缺点:uuid长度大(32位),占用空间比较大,对应数据库中类型 char  varchar
                assigned        自然主键。由java程序负责生成标识符。
                        不建议采用。
                        尽量在操作中避免手动对主键操作
               
        3. hibernate持久化对象的状态
                a. 持久化对象状态有三种:
                        i. 瞬时态:也叫零时态或自由态,它一般是指new出来的对象,它不存在OID与hibernate session无关联,在数据库中也无记录,使用完成后会被JVM回收掉,它只是用于信息携带------简单介绍:无OID语数据库中的信息无关联,不在session管理范围内
                        ii. 持久态:在hibernate session管理范围内,它具有持久化表示OID,它的特点:在事物未提交前一直是持久态----简单介绍:有OID由session管理,在数据库中可能有也可能没有.当它发生改变时hibernate是可以检测到的
                        iii. 托管态:也叫做游离态或离线态,它是指持久化对象,失去了与session关联托管态对象存在OID,在数据库中有可能存在也有可能不存在.对于托管态对象,它发生改变时,hibernate不能检测到

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马