hibernate简单整理

hibernate
    1.配置文件
        核心配置文件 hibernate.cfg.xml
            1.四本一言
                jdbc驱动
                数据库的url
                数据库密码
                数据库用户名
                hibernate方言:hibernate可以将对实体的操作转换为当前正使用的数据库的sql语句.
            2.是否打印sql语句
            3.实体映射文件的配置
                mapping
            4.二级缓存和查询缓存的配置
            5.是否根据实体创建表
                create
                    重新运行就重新建表
                update
                create-drop
                    每次运行创建,运行关闭表就删除
                validate
                    根据是也和现在已存的表进行对照
            6.事务的的隔离级别
                串行化 serializable 8
                可重复读 repeatable-read 4
                可读提交 read  committed 2
                可读未提交 read unCommitted 1
            7.数据库连接池的配置
            注意:配置文件的顺序不同,可能产生不同的结果 (在大标签中看配置顺序)
        实体映射文件(类名.hbm.xml)
            1.实体对应的表 <class>
                name:实体类(包名+类名)
                table:对应的表名
            2.主键的配置<id>
                name:变量名
                column:表中字段名
                type:指定字段类型
                
            3.主键策略:<generator>
                native:根据所使用的数据库,生成不同的主键约束,例如mysql就是自增
                increment:自动增长
                assigned:实体对象自己指定主键
                identity:自增
                sequence:序列
                Uuid:随机字符串作为主键
            4.乐观锁的配置:<version>
            5.普通属性的配置:<property>
            6.复合属性配置:<component>:当前实体类中某一个属性是另一个实体类,我们需要将该属性实体中的成员变量作为当前实体的字段
            7.复合主键:<composite>
            8.配置常见的SQL语句:<sql-*>
    2.hibernate5个核心接口
        1.Configuration 加载配置文件,创建sessionFactory对象
        2.SessionFactory
            1.创建session
            2.在内置缓存中缓存了cfg,hbm等配置文件
            3.外置缓存:二级缓存
            4.会话工厂对象中缓存了hibernate运行的大部分资源所以在使用hibernate期间不要轻易的关闭会话工厂,因为每次加载太耗资源,当项目关闭时,在关闭会话工厂对象清空资源
            5.创建session
                1.openSession每次open都是新的session
                2.getCurrentSession,将session和线程绑定(一般使用单线程).需要在cfg.xml文件中将session和线程绑定
        3.Session
            1.一级缓存
            2.增删改查
                save(对象) 持久化状态下的对象被save会怎么样?
                delete(对象) 被删除的对象不存在会怎么样?
                update(对象) 被更新的对象不存在?
                get/load 只能根据主键获取某个实体. 如果查询的实体不再数据库中,get返回null ,load报异常.
                sql:可以进行查询,插入,删除,更新是否能用hql?
                criteria进行查询?
                merge的使用?
                saveOrUpdate
        4.Transaction
            1.事务
            2.hibernate的操作需要在事务中进行
            开启事务.提交/回滚
        5.Query
            执行查询操作
            获取查询的结果集
                list
                iterate
                uniqueResult
    3.对象的三种状态
        1.临时状态(瞬时状态) 缓存中没有该对象,数据库中也没有该对象
        2.持久化状态:缓存中有该对象.数据库中也有该对象
        3.游离状态:缓存中没有该对象,数据库中有该对象
        三种状态之间的转换
            new, delete 之后临时状态
            get/load save update 进入持久化状态
            持久化状态时执行 close clear .evict.进入游离
    4.单元测试:
        1.对某些小功能进行单独测试
    5.hibernate缓存机制
        1.一级缓存
            必须使用  session缓存
                1.缓存时间短,存在的有效周期为session close或者clear之后缓存就清理掉了
                2.缓存范围小,只能在session中使用
                3.如果某份数据经常需要更新,最好使用session的缓存
        2.二级缓存
            可以通过配置来进行使用,缓存数据是存储在sessionFactory中.一般存储的数据为对数据安全要求低,不经常更新的数据.
        3.查询缓存
            只存储查询数据的id,要使用其他字段的值,还需要根据id再次进行查询,一般配合二级缓存使用.
    6.多表的关系映射
        1.一对多
            在一的实体类中需要加一个集合类型的属性(用来表示和多方的关系),最常使用的是Set; 集合类型必须是接口类型;在hbm的配置文件中   lazy (懒加载:查询当前一实体时,如果不使用集合就不会查询多实体)       inverse:是否维护双方的关系;一般一方不维护
        2.多对一
            实体中增加一个一方类型的属性.在配置文件中<many-to-one> 不能指定(不能设置inverse属性)是否维护关系(必须维护双方关系)
        3.一对一
            主键关联
            唯一(unique)外键关联
        4.多对多
            实体中双方都加入集合属性,元素类型都为对方,配置文件中<many-to-many>
            多一张中间表,一般中间表有两个字段,其中一个是A表的主键,另一个是B表的主键,这两个字段分别是AB表的外键,这两个字段默认为复合主键.
            A表示一个实体,B表也是一个实体,中间表也是一个实体没然后A和中间表建立一对一的关系,B也和中间表建立一对对的关系,对中间表的可控性增强.
    7.事务的隔离级别
        如果事务未隔离可能会导致:
            1.第一类数据丢失
            2.第二类数据丢失
            3.脏读
            4.幻读(虚读)
            5.不可重复读
        事务的特性:
            1.原子性
            2.一致性
            3.隔离性
            4.持久性
        事务的隔离级别
            serializable 串行化:所有的问题都是事务的并发造成的,串行化是事务不能并发,必须一个执行完了才能执行下一个事务,安全效率低,一般不推荐使用
            repeatable- read 可重复读:可防止脏读,不可重复读的发生
            read - committed 可读提交:可防止脏读的发生;
            read-uncommitted 可读不可提交:可防止第一类更新丢失
            事务的隔离级别越高并发性能越差.   1 .  2 . 4 .8
        解决事务的并发
            悲观锁
            乐观锁 version

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊掌渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值