zoukankan      html  css  js  c++  java
  • Hibernate入门 (二)三种状态

    .大配置
    方言
    property name="dialect" 取值
    自动构建表结构
    property name="hbm2ddl" true
    connection_url: 连接字符串
    显示sql
    show_sql
    格式化SQL
    format_sql
    2.Hibernate测试类中操作步骤
    7个步骤
    1.读取配置文件,形成config对象
    2.SessionFactory
    3.获取Session
    4.开启一个事务
    5.执行操作
    6.结束(提交或者回滚)
    7.关闭
    3.小配置
    <class name="Dept" table="Dept">
    <id property="deptno" column="deptno">
    主键生成策略 : 数据库
    <generator class="native"></generator>
    </id>
    </class>

    4.idea引入依赖(使用的Oralce的话)
    1.手工jar包注册到仓库中
    1.有maven环境
    2.修改conf/settings.xml 中的路径,改成自己仓库的路径
    3.注册命名 mvc insatll:install-file -Dgroupid
    2、直接物理引用
    5.按主键查询
    get
    load

    区别1:load:代理对象
    get: 永远返回的是原始对象本身

    区别2:如果load/get 加载的记录数据不存在,get返回null 。load抛出异常ObjectNotFoundException

    6.添加
    注意事项:需要事务环境
    session.save(dog);

    7.补充了两种获取session的方案
    openSession()
    getCurrentSession()--------------->你得在大配置中。
    <property name="current_session_context_class">thread</property>
    导致的结果,自己就不用手动的关闭连接了。
    --------------------------------------------------------------
    修改
    update()
    merge(): save() update() 有没有OID
    saveOrUpdate() 修改

    saveOrUpdate()和merge()区别
    解析:区别 1:saveOrUpdate() 会改变入参进来对象的状态 merge不会
    区别 2: saveOrUpdate() 没有返回值 merge返回一个对象

    2.OID
    OID 是持久化类(Student)与数据表主键对应属性, 用来唯一区分持久化对象。
    3.删除

    4.PO VO DTO POJO JavaBean
    JavaBean=POJO 和数据库无关的 PageUtil类,需要持久化不不需要
    PO=POJO+xml

    5.主键生成策略
    Increment :hibernate生成,弊端:多线程可能取到的是同一个id,但是导致其他线程保存失败
    identity: 数据库生成 ,mysql支持,oracle不支持
    sequence: 数据库生成,oracle支持
    native: 数据库决定:mysql使用identity,oralce使用序列
    uuid Hibernate生成 优点:不会重复,数据迁移比较好 要求:列的类型字符串
    assigned :程序员手动操作的。

    OID
    Hibernate中Java对象的三种状态
    get和load



    /**
    * 在 increment基础之上操作!
    * hibernate中的三种状态
    *
    * 01.瞬时状态 Student stu=new Student();
    * 新创建的对象,没有与session产生关联!
    * 02.持久状态 session.save(stu)
    * 被session管理,存在session缓存中!当commit的时候,会提交到数据库!
    * 03.游离状态 session.close(); stu
    * 曾经被session管理过,但是现在不存在session缓存中了!
    *
    *
    * 瞬时状态 和游离状态的区别在于:是否被session管理过! 对象是否拥有OID(对象标识符)!
    *
    * 对象有主键值id,那么就有OID,在操作的时候会执行update语句!
    * 没有主键值id,那么就没有OID,在操作的时候会执行insert语句!
    *
    * 对象只要是没有OID,在执行update()肯定报错!在执行saveOrupdate的时候会执行Save()方法!
    *
    */

    6.核心API
    6.1 Configuration
    InputStream x = ConfigHelper.getResourceAsStream("/hibernate.properties");
    hibernate.hbm.xml配置文件

    6.2 SessionFactory:重量级的,一个程序中一份就可以了。线程安全的。
    Creates Sessions. Usually an application has a single SessionFactory.
    Threads servicing client requests obtain Sessions from the factory.

    创建会话。通常, 应用程序有一个单一的 SessionFactory。
    服务客户端请求的线程从工厂获取会话。
    SessionFactorys are immutable. The behaviour of a SessionFactory
    is controlled by properties supplied at configuration time.
    These properties are defined on Environment.

    SessionFactorys 是不可变的。SessionFactory 的行为由配置时提供的属性控制。
    这些属性是在环境中定义的。

    线程安全的::方法中来用一个对象,不用考虑线程安全问题
    成员变量,发现他是一个接口,接口中都是方法

    6.3 Session 他也是一个接口,实现类是SessionImpl ,当中也是方法,但是他是线程非安全的。
    Session构建两种方式

    方式一:factory.openSession(); 随机从连接池中获取到一个连接。

    factory.getCurrentSession(); 一定获取的是和当前线程绑定的session.

    6.4 事务

    7.刷新缓存(某一时刻点触发的动作)
    12: 睡觉了 脱衣服
    28 结婚 入洞房 脑洞打开,自己想。否则就不好玩了 (怎么入洞房)
    tx.commit() ;刷新缓存 刷新缓存做什么 (做脏检查)

    快照(Snapshot)是某个数据集在某一特定时刻的镜像,也称为即时拷贝,它是这个数据集的一个完整可用的副本

    1.修改
    update
    merge()
    saveOrUpdate()

    2.删除

    3.PO DTO VO POJO JavaBean

    4.主键生成策略
    native
    uuid
    assigned

    5.在Hibernate中Java对象的三种状态
    瞬时态
    持久态
    游离态

    瞬时态---->持久态 save() load() get()

    持久态---->游离态 clear() close() evict()

    游离态---->瞬时态 delete()

    瞬时态和游离态?有没有OID
    6.OID 持久化对象的唯一标志。OID一定是和底层数据表中记录的主键值绑定的。

    7.Hibernate API
    Configuration 类

    SessionFactory 接口 SessionFactoryImpl

    Session 接口 SessionImpl
    session:getCurrentSession()当前线程绑定 调度多次 内存地址一样,同一个对象
    openSession() :每次获取到的session一定是新的。
    Transaction

  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/hualishu/p/7586202.html
Copyright © 2011-2022 走看看