深入浅出hibernate第一天

来源:互联网 发布:英国本科留学费用 知乎 编辑:程序博客网 时间:2024/06/06 02:37

好久没有写blog的习惯了,实习的时候很累就忘记了写了,三个月的实习生活,和实习回来的的颓废,导致忘记了写自己的blog,保持前进的方向和动力,终于在上周,我重新开始拿回书本,开始深入了解一些框架的知识,如tomcat的构造分析,spring的源码分析,hibernate的深入浅出,今天就是对深入浅出hibernate的这本书的前120页的一个小总结:

1. 在hibernate中,session对象负责管理对象的持久化操作

    session的关系相当于在JDBC中的Connection的关系
2. Session的创建大概需要3个步骤:
    (1)、初始化hibernate的配置管理类Configuration
        Configuration config = new Configuration().configure();
     (2) 、通过Configuration类实例获取Session工厂类SessionFactory;
        SessionFactory  sessionFactory = config.buildSessionFactory();
     (3) 、通过SessionFactory类实例,获取Session对象;
        sessionFactory = sessionFactory.opensession();
Session初步总结
 Configuration config = new Configuration().configure();
 SessionFactory sessionFactory = config.buildSessionFactory();
 Session session = sessionFactory.openSession();

 session.save()表示实现了保存的操作,通过session.flush()方法不缓存中的数据刷新到数据库中;


3.Hibernate的基础语义
3.1 Configuration
    正如起名,configuration负责管理Hibernate的配置信息,Hibernate启动是需要获取一些底层的基本信息:
        数据库:URL,USERNAME,PWD,驱动,数据库适配器(dialect)【相当于数据库使用的方言】
    默认是hibernate配置文件的实现是通过当前classpath的路径获取路径下的hibernate.cfg.xml配置文件
    当然我们可以使用自己的配置文件,使用方法如下:
    File file = new File(“配置绝对路径”);
    Configuration confg = new Configuration().config(file);
3.2 SessionFactory
    负责创建Session实例,SesionFactory是用Configuration对象进行构建的,赋予了特定的configuration配置信息
    SesionFactory采用线程安全的设计,可用多个线程并发使用,大多是情况下,一个数据库配置一个SessionFactory实例;
3.3 Session
    Session作为贯穿Hibernate的持久化管理核心,提供了众多的持久化操作,通过这些操作,我们可以透明地完成对象的CRUD(增删查改),一个session只能在一个线程使用
    方法有:sava,get,delete,find

4.配置的细节问题:
    数据库连接的配置:
     hibernate设置了两种访问数据库的访问的策略:
    一种是:根据制定的JDBC参数进行数据库连接,用Hibernate完成管理过程,
    ## MySQL


    #hibernate.dialect net.sf.hibernate.dialect.MySQLDialect

    #hibernate.connection.driver_class org.gjt.mm.mysql.Driver

    #hibernate.connection.driver_class com.mysql.jdbc.Driver

    #hibernate.connection.url jdbc:mysql:///test

    #hibernate.connection.username root

    #hibernate.connection.password


    ## Oracle



    #hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
    
#hibernate.dialect net.sf.hibernate.dialect.OracleDialec

    t
#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver

    #hibernate.connection.username ora

    #hibernate.connection.password ora
    
#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test

    一种是:通过JNDI完成数据库连接获取
    ## JNDI Datasource


    #hibernate.connection.datasource jdbc/test
    
#hibernate.connection.username db2

    #hibernate.connection.password db2


5 hibernate的事务管理
    配置hibernate.transaction.factory_class
    配置的属性有:JDBC事务处理机制和JTA事务管理机制
6 hibernate两种配置文件的差异主要在结构上的差异,还有xml的配置文件需要配置mapping映射需要加载的hibernate映射文件
7 ORM映射,是ORM框架中最为关键的的组成部分
    hibernate的基本数据类型
基础映射
   类/表的映射
    属性name=“类名” table=“表名”

    格式:
    < class = "className" table="tableName"    >
        <generator name="native">
    < /class >
    hibernate的主键生成策略:
    主键生成策略的标识为:<generator classs=“策略”>
    1. Assigned 由应用逻辑生成,hibernate不进行干预
    2.hilo 由hi/lo算法实现的主键机制,需要额外的数据表保存主键的生成历史
    3.seqhilo 通过hi/lo算法实现的主键生成机制,只是主键的历史状态保存在sequence中,适合支持sequence的数据库
    4.increment 主键的数值顺序递增,多个实例访问数据库时可能生成多个一直的主键造成数据的错误,应该避免
    5.identity 采用数据库的主键生成机制,支持的数据库有Sql Server,MySql
    6.sequence 菜熟数据库提供的sequence机制生成主键
    7.native 由hibernate根据数据库适配器的定义,自主在identity。hilo。sequence中选择一样适合当前数据库的主键机制
    8.uuid
        hex 由hibernate进行基于当前设备ip,时间,jvm的启动时间,内部增量等四个参数生成的hex进制数值
        String 用hex生成的主键为进行编码长度为16为
    9.foreign 使用外部表字段作为主机爱你
    10.select hibernate3中新引入的主键获取方式
   字段/属性的映射
    属性name=“” column=“” tyep=“”
    格式:
    <property
        name=""
        column=""
        type="" >
    hibernate3同时还提供了一种与实体类型无关的映射关系:动态模型(Dynamic Model)
        即通过通用数据容器(如Map)对库表进行表达
高级映射技术;
    高级映射技术,主要用与自定义的数据类型,hibernate提供了UserType和CompositeUserType两个自定义类型的接口
    1.将一对多的映射关系中的多的一个方面使用实现UserType的技术成眠上是得多的数据作为一个整体的数据保存成该数据类型的一个“长”数据类型,各个数据之间使用“某些特殊符

号”进行间间隔,在hbm.xml的字段映射中使用自定义的实现了UserType的数据类型
          复合主键的定义
    hibernate的符合主键定义是composite-id,在compostie-id的标签中使用key标签表示一个符合组件的一个关键字
    hibernate要求符合组件需要覆写的equals()方法和hashcode()方法
    大数据的数据类型映射:
    sqlServer可以很简单的之间树勇blob和clob进行流式的数据类型处理
    oracle拥有自己对大数据类型的处理方式,通过游标的方式对Blob和Clob数据的处理



0 0
原创粉丝点击