zoukankan      html  css  js  c++  java
  • Hibernate入门

    1.大配置
    方言
    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在 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.刷新缓存(某一时刻点触发的动作)
    tx.commit() ;刷新缓存 刷新缓存做什么 (做脏检查)

  • 相关阅读:
    Köln-keith jarrett
    关于写博客,看博客
    django中使用celery
    django邮箱验证模块
    django验证码模块使用
    auth模块
    djangoORM语句
    django的from组件
    django分页
    django基本数据类型
  • 原文地址:https://www.cnblogs.com/dongyuhan/p/7586206.html
Copyright © 2011-2022 走看看