zoukankan      html  css  js  c++  java
  • hibernate第二天

      hibernate的核心思想就是将之前对单个字段的操作变为操作一个对象,使用了ORM(Object relation mapping)对象关系映射的思想

       

    ·  在hibernate中对数据库特殊字段的有着具体配置,不同的数据库有不同的主键生成策略  

          映射到数据的实体对象也需要有以下几点需要注意

    1. 私有化成员变量
    2. 提供get/set方法
    3. 提供无参构造(底层需要反射 反射支持是无参构造)
    4. 类型尽量使用包装类 private int  Integer  因为包装类有null值 
    5. 需要有oid( object id )跟主键相对应
    6. 持久化类尽量不使用final修饰

          主键的shengt生成策略、          

            主键的生成有俩个位置可以生成 : JAVA  数据库

            自然主键跟业务有关 参与了业务逻辑主要用来区分不同数据 对象 保证数据不重复 

            订单表(order_id) 支付 oid发送了给第三方  第三方响应回来order_id数据

            代理主键跟业务无关 主要用来区分不同数据 对象 保证数据不重复

          JAVA

            手动插入

            assigned : 手动插入主键

            自动插入

            increment: hibernate 自动查询数据库增长 不适合集群(多个计算机组合成的效果)

            每次查询这个表的最大值 +1 赋值

          uuid : 自动产生一个随机的id

        数据库

          native : 根据不同数据的底层自动增长

          identity: mysql的自动增长(auto_increment)  支持自动增长字段 db2 sqlserver

          sequence:oracle 自增长序列

        当然在操作持久化对象的时候,持久化对象也存在三种不同的状态

            对象 在创建到获得 到 session 其实经历了三种状态

           * 瞬时态: 创建一个对象 瞬时态 没有OID 跟session没有关系

           * 持久态: 获得一个对象 (重点) 有OID 跟session有关系

           * 游离态或者脱管态:session关闭后 叫游离态 有OID 跟session没关系

       hibernate的一级缓存和快照机制的原理示意图

          

          

      hibernate对数据库的操作都需要开启事务

        事务指的是  逻辑的一组操作,要么全部成功,要么全部失败

      

    事务的特性:

    原子性一组操作 不可再分割

    C 一致性: 事务的前后数据保证一致

    I 隔离性(lsolation): 多事务之间的操作

    D 持久性: 事务不可逆

     

    隔离问题:

    脏读 : 一个事务读到了另一个事务没有提交的数据

    不可重复读一个事务读到了另一个事务已提交的数据(update)

    虚读/幻读: 一个事务读到了另一个事务已提交的数据(insert)

    解决方案:

    读未提交 不解决任何问题

    读已提交 解决脏读 Oracle默认隔离级别

    可重复读 解决脏读 不可重复读问题  mysql的默认隔离级别

    串行化 解决三个问题

        对事务的配置

       在hibernate的核心配置文件中,

      

        openSession() 表示 每一次调用 获得一个新的session对象

        getCurrentSession() 表示获得当前线程的session对象 等效以前的将connection 绑定的到当前线程上

      hibernate也存在其他的检索方式,但是使用起来要因环境而异

        

    1. oid查询 get/load
    2. 对象导航查询
    3. HQL ( Hibernate Query Language) hibernate查询语言 面向对象
    4. QBC ( Query By Creteria) hql更加面向对象  离线查询
    5. SQL
  • 相关阅读:
    类型:NodeJs;问题:默认IE的编码为utf8;结果:IE不能自动选择UTF-8编码解决办法
    类型:Java;问题:eclipse配置maven;结果:eclipse配置maven
    类型:Oracle;问题:oracle 时间加减;结果:ORACLE 日期加减操作
    类型:Ajax;问题:ajax调用ashx参数获取不到;结果:ashx文件获取$.ajax()方法发送的数据
    类型:JQuery;问题:ajax调用ashx文件;结果:ashx文件怎么获取$.ajax()方法发送的json数据
    类型:Jquery;问题:jquery调用后台带参数方法;结果:利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法。
    问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置
    问题:ClientIDMode属性;结果:ASP.NET 4.0的ClientIDMode属性
    金木水火土五行查询表
    并发编程的基础
  • 原文地址:https://www.cnblogs.com/dubin382460/p/7989449.html
Copyright © 2011-2022 走看看