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

  • 相关阅读:
    逆向与BOF基础——注入shellcode并执行&Return-to-libc
    20145304 网络对抗技术 逆向与Bof基础
    20145303刘俊谦 《网络对抗》Exp9 Web安全基础实践
    操作系统取证实践
    20145303刘俊谦 Exp8 Web基础
    20145303刘俊谦 Exp7 网络欺诈技术防范
    20145303《网络对抗》信息收集和漏洞扫描技术
    20145303刘俊谦《网络攻防》Exp4 Msf基础
    msf辅助模块的应用
    Adobe漏洞攻击
  • 原文地址:https://www.cnblogs.com/hualishu/p/7586202.html
Copyright © 2011-2022 走看看