hibernate(一)

Hibernate是一个对象关系映射框架,对JDBC进行了非常轻量级安装(轻量级主要是相对于重量级来说,如EJB, 量级主要是看对容器的依赖性所决定的,依赖性越小,越轻量 . )。
    Hibernate与数据库的连接配置信息都封装在hibernate.propertis或hibernate.cfg.cml文件中,对象-关系的映射文件工作依靠ORM映射文件进行。
    Hibernate API介绍:
        |Configuration类:负责配置和启动Hibernate,创建SessionFactory实例
        |SessionFactory接口:负责初始化Hibernate,创建Session实例
        |Session接口:负责保存、更新、删除、加载和查询持久化对象,充当数据源代理
        |Transaction接口:对底层的事务进行了封装,充当事务管理器
        |Query、Criteria接口:执行数据库查询,充当Hibernate查询器
    Hibernate开发的几个步骤:
        1、创建数据库
        2、将Hibernate所需的jar包复制到WEB-INF/lib目录下
        3、创建Hibernate的配置文件
        4、手动配置或者利用IDE提供的插件从数据库中创建出响应的实体对象及其ORM映射文件
        5、创建Hibernate的SessionFactory类(一般通过封装在一个util包中然后直接调用)
        6、创建Session实例进行持久化对象的管理
        7、通过创建Transaction实例进行事务管理
        8、通过创建的Query话Criteria实例进行数据的查询操作
    hibernate.cfg.xml文件配置如下:

<?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->
  <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
  <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
  <property name="connection.username">sa</property>
  <property name="connection.password"></property>

<!-- JDBC connection pool (use the built-in) -->
  <property name="connection.pool_size">1</property>

<!-- SQL dialect -->
  <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

<!-- Enable Hibernate's automatic session context management -->
  <property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache  -->
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
  <property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
  <property name="hbm2ddl.auto">update</property>

<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>

</session-factory>

</hibernate-configuration>

     可以通过一下封装获取SessionFactory:

   
       一个ORM映射文件的格式如下:

<hibernate-mapping package="org.hibernate.tutorial.domain">


    <class name="Event" table="EVENTS">

        <id name="id" column="EVENT_ID">

            <generator class="native"/>

        </id>

        <property name="date" type="timestamp" column="EVENT_DATE"/>

        <property name="title"/>

    </class>


</hibernate-mapping>

        Hibernate的映射机制:
       
        ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
       

<img alt="图片" src="httlocalhost
  <property name=" connection.username?>sa<="" property>
  <property name="connection.password"></property>

<!-- JDBC connection pool (use the built-in) -->
  <property name="connection.pool_size">1</property>

<!-- SQL dialect -->
  <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

<!-- Enable Hibernate's automatic session context management -->
  <property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache  -->
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
  <property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
  <property name="hbm2ddl.auto">update</property>

<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>

</session-factory>

</hibernate-configuration>

     可以通过一下封装获取SessionFactory:

   
       一个ORM映射文件的格式如下:

<hibernate-mapping package="org.hibernate.tutorial.domain">


    <class name="Event" table="EVENTS">

        <id name="id" column="EVENT_ID">

            <generator class="native"/>

        </id>

        <property name="date" type="timestamp" column="EVENT_DATE"/>

        <property name="title"/>

    </class>


</hibernate-mapping>

        Hibernate的映射机制:
       
        ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
       

图片

       在Hibernate中,提供了Hibernate主键生成策略。下面是比较常用的几种:

1:assigned

表示在新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。

其缺点为在执行新增操作时,需查询数据库判断生成的主键是否已经存在。

2:increment

表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。但是,该主键生成策略也有些缺点。

(1)新增数据前先查询一遍,影响了性能。

(2)主键的类型只能为数值型的int或者long

(3)并发操作时的冲突问题。

3:identity

不如说是为sqlerver数据库量身定做的。主要适用于sqlserver数据库的自动增长列的表。

4:native

表示根据不同的数据库采用不同的Hibernate主键生成策略。比如,当前数据库为sqlserver,则会采用identity,如为oracle,则采用

oracle中的sequence等。区分数据库的不同是以hibernate主配置文件中sessionFactory中配置的数据库方言。

Xml代码

<id name="实体类属性名" type="java.lang.Integer">
       <column name="对应表中主键字段名" />
       <generator class="assiged|increment|identity|native|........" />
</id>

采用hibernate主键生成策略,就可以比较灵活和方便的对表中的主键字段进行操作了。而且,不同的数据库,不同的主键形式,也只需要修改下映射文件就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值