持久化对象的状态、Hibernate配置文件、映射对象标识符 、 映射组成关系 、 Hibernate把持久话类的属性分为两种

持久化对象的状态
持久化对象的状态有:站在持久化的角度,hiberante把对象分为4中状态:持久化状态,临时状态,游离状态,删除状态
Session的特定方法使对象从一个状态转化到另一个状态。
    1)临时对象(Transient):
    -)在使用代理主键的情况下,oid通常为null。
    不处于Session的缓存中
    在数据库中没有对应的记录
    2)持久化对象(也叫托管)(persist)
        OID不为null
        位于Session缓存中
        若在数据库中已经没有和期对应的记录,持久化对象和数据库中的相关记录对应。
        Session在flush缓存时,会根据持久化对象的属性变化,来同步更新数据库
        在同一个Session实例的缓存中,数据库表中的每条记录之对应唯一持久化对象。
    3)删除对象(Removed)
        在数据库中没有和其oid对应的记录
        不在处于Session缓存中
        一般情况下,应用程序不该再使用被删除的对象
    4)游离对象(也叫“托管”)(Detached):
        OID不为null
        不再处于Session缓存中
        一般情况需游离对象是由持久化对象转变过来的。因此在数据库中可能还存在与他对应的记录。
        
Hibernate配置文件
    hibernate的配置文件主要用于配置数据库连接和hibernate运行时所欲的各种属性,
    每个hibernate的配置文件对应一个Configuration对象,
    hibernate配置文件可以有两种格式
        1)hibernate.cfg.xml
        2)hibernate.properties
3.在hibernate中使用C3P0数据源
    1)导入jar包
    c3p0-0.9.2.1.jar
    c3p0-oracle-thin-extras-0.9.2.1.jar
    mchange-commons-java-0.2.3.4.jar
    2)加入配置项
        hibernate.c3p0.max_size:数据库连接池的最大连接数。
        hibernate.c3p0。min_size:数据库连接池的最小连接数
        hiberante.c3p0.acquire_increment:数据库连接池大众的连接耗尽时,同意石窟获取多少个数据库连接。
        hiberante.c3p0.idle_test_period:表示连接池检测线程多长时间检测一次池内所哟连接对象是否超市,
连接池本身不会把自己从连接池中移除,而是专门有一个线程按照时间间隔来做这件事情。这个先策划能够给你过比较连接对象醉意一次背时用时间和
当前时间差来和timeout做对比,进而决定是否销毁这个连接对象。
        hibernate.c3p0.max_statemetns:缓存Statement数量对象。
            <property name="hibernate.c3p0.max_size">10</property>
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.acquire_increment">2</property>
    <property name="c3p0.idle_test_period">2000</property>
    <property name="c3p0.max_statements">10</property>
    <property name="c3p0.timeout">2000</property>
    
    
    
    Pojo的映射文件.hbm.xml
pojo类和管理系数据库之间的映射可以用一个xml文件来映射
    hibernante-mapping
        类层次:class
        主键:id
        基本类型:property
        实体应用类。many-to-one|one-to-one
        集合:set|list|map|array
            -one-to-many
            -many-to-many
        子类:subclass|joined-subclass
        其他:component|any等
        查询语句:query(用来存放。查询语句,便于对数据库查询的统一管理和优化)
        每个hibernate-mapping中可以同时定义多个类,但更推荐为每个类都创建一个单独的映射文件。
在java中代表时间和日期的类型包括:java.util.Date和java.util.Calendar
此外,在jdbcapi中还提供了3个扩展了java.util.Date类子类。java.sql.Date,java.sql.time
和java.sql.Timestamp,这三个类分贝和标准的sql类型的 date
    Mapping映射文件
    class  下的name="com.test.User"可以换成  <hibernate-mapping package="name="com.test.User"">
        如果有多个class标签就不用在一一尽行配置值name属性了
    动态更新:dynamic-update="true"
     <class name="com.test.User" table="users1" catalog="test" dynamic-update="true" >
    更改数据库信息时候,数据库语句只显示更改的字段
        eg:只更改username时候, update
        test.users1
    set
        username=?
    where
        id=?
        映射对象标识符    
            Hiberante使用对象标识符(OID)来建立内存中的对象和数据库表中的记录的对应关系。对象的OID和数据表的主键对应
Hibernate通过标识符生成器来为主键赋值。
            Hibernate推荐在数据表中使用代理主键,即不具备业务含义的字段,代理主键通常为整数类型,因为整数类型比字符串类型节省跟多的数据库空间。
            在对象--关系映射文件中,<id>元素用来设置对象标识符。<generatror> 子元素用来设定标识符生成器。
            Hibernate提供了标识符生成器接口,IdentifierGnerator,并提供 了各种内置实现
    id:设定持久化类的oid和表的映射
        name:标示持久化类的oid的属性名
        column:设置标识符属性的oid属性名(主键字段名)
        unsaved-value:若设定了该属性,Hibernate会通过比较持久化类的oid值和该属性值来区分当前持久化类的对象是否为临时对象。
    generator:主键生成策略    
                1.increment(开发时候不建议使用):标识符生成器有hibernate以递增的方式为代理主键赋值,Hibernat会先读取数据表中主键的最大值,而接下
向数据表中插入记录时候,就在读取最大值的基础上加一。它的适用范围:由于increment生存标识符机制不依赖于底层数据库系统。一in次它适合所有的数据库系统,
适用于只有耽搁Hibernate应用进程的访问同一个数据库的场合,在集群环境下不推荐是用,oid必须为long,int 或者为short  如果把oid定义为byte类型。则运行时候会出出现异常

                2.inentity标识符生成器:identity标识符生成器有底层数据库来负责生成标识符。它要求底层数据库把主键定义为自动增长的字段类型。
适用范围:由于identity生成标识符的机制依赖于底层数据库系统,因此要求底层数据库系统必须支持泽东整张字段类型。支持自动增长字段类型的数据库包包括:db2  Mysql
Mssqlserver  sybase等。oid必须为long  int  或short类型,如果把oid定义了byte类型那个,则会在运行时候出错。
                3.sequence标识符生成器:sequence标识符生成器利用底层数据库提供的徐磊来生成标识符
hiberante在持久化一个User对象时,先从底层数据库的 news  sq序列中获取一个唯一的标识符,再把它作为主键值。它的适用范围是:
由于sequence生成标识符的机制依赖于底层数据库的系统的序列。因此要求底层数据库系统必须支持序列。支持徐磊的数据库包括db2.oracle等
oid必须为  long  int 或short   类型,如果把oid定义为一个byte类型,在运行时会抛出异常。
                4.hilo标识符生成器:hilo标识符生成器由hibernate按照一种high/low算法*生成标识符,它从数据库的特定表的字段红获取high值。
1)hiberante在持久化一个User对象时,有hibernate负责生成主键值,hilo标识符生成器在生成标示符是时,需要读取并修改HI_TABLE的
NEXT_VALUE值。他的适用范围是:由于hilo生成标识符机制不依赖于底层数据库系统的实现,因此它适合所有的数据库系统,
oid必须为 int long  或者short。如果把oid的类型改为short则会抛出异常。
                5.native标识符生成器:native会根据底层数据库对自动生成标识符的支持能力来选择使用identity,sequence或hilo标识符生成器。
适用范围是:由于native能根据底层数据库系统的类型自动选择合适的标识符生成器,因此很适合夸数据库平台开发。但oid必须为int long,short不能为byte。
        Property属性
                =配置<property name="hbm2ddl.auto">属性
在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容:
<property name="hbm2ddl.auto">create</property>
<property name="hbm2ddl.auto">的选项有:validate | update | create | create-drop
areate
如果数据库里没这张表,则自动创建。
update
配置文件里的表结构发生改变,重新创建该表。
create-drop

在显式关闭SessionFactory 时,将删除掉数据库 schema。
validate
验证,每次对数据库表作操作时验证是否和映射文件的结构对应上。        

    映射组成关系
        Hibernate把持久话类的属性分为两种
            1、值(value)类型:没有OID 不能被单独持久化,生命周期依赖于所属的持久化类的对象的生命周期
            2、实体(entity)类型。:有OID可以单独被持久化,有独立的生命周期
eg:如果一个属性是一个类的对象,那么显然无法直接调用<property>映射pay属性。
    Hibernate使用<Component>元素来映射组成关系。该元素表明pay属性是work类的一个组成部分,在
Hibernate中称之为组件。
    <component name="pay" class="Pay">
            <!-- 指定组成关系的组建属性 -->
            <property name="monthlyPay" column="MONTHLY_PAY"></property>
            <property name="yearPay" column="YEAR_PAY"></property>
            <property name="vocationWithPay" column="VOCATIONWITH_PAY"></property>
        </component>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

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

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

打赏作者

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

抵扣说明:

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

余额充值