Hibernate初学细节

一、Hibernate核心配置文件重要属性(hibernate.cfg.xml)

       (1):hibernate.hbm2ddl.auto

<!--值可以为create/create-drop/update/validate-->
<property name="hibernate.hbm2ddl.auto"></property>

create :执行数据库操作前先删除原有表,在重新建一张新表.

create-drop :每次执行数据库操作要经过删除原有表,建立新表,执行完再删除表的过程. 执行完的标志是SessionFactory关闭.

update :如果数据库中有指定表,则使用该表;否则,建立新表. 如果某一字段在表中不存在,则会在表中产生新字段.

validate :不建立表,只会检查旧表,如果配置不一致则会报错.

前两种一般用于测试.

      (2):hibernate.dialect

高版本MySQL数据库使用上面的create来使用DDL创建数据库可能会报错,要修改一下hibernate的方言:

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

二、主键的生成策略(xxx.hbm.xml)

        increment:使用hibernate的自增长策略,先查找当前主键的最大值,然后在此上面加一,存在线程安全问题。

        identity:使用数据库的自增长策略,不适用于Oracle。

        sequence:应用于Oracle数据库。

        native:根据本地策略,数据库不同,选择identity或sequence。

        uuid:采用随机字符串作为主键。

        assigned:hibernate不维护主键,由程序生成。

三、Session的load和get方法

不同之处:(1)、get获取的是真实的持久类对象,而load获取的是代理对象。

                  (2)、load采用延迟加载(lazy),只有真正使用持久类对象时才会发送sql语句;而get方法使用时会立即发送sql。

                  (3)、load根据一个不存在主键查询时,会抛出ObjectNotFound异常,而get可能会抛出NullPointerException。

四、hibernate的API

       Configuration:负责管理hibernate的配置信息。

hibernate的核心配置有两种方式:hibernate.cfg.xml或xxx.properties

所以Configuration对象提供了多种configure方法的重载,空参的configure方法就是默认加载hibernate.cfg.xml文件。

hibernate的映射文件配置:xxx.hbm.xml

当使用xxx.properties作为核心配置文件时,就无法使用mapping标签对映射文件进行关联,

这时要使用:

configuration.addResource("cn/itcast/hibernate3/demo1/Customer.hbm.xml");

或:

configuration.addClass(持久类.class);

       SessionFactory

     该对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句,该对象是线程安全的,还负责维护Hibernate的二级缓存,对象根据数据库信息,维护连接池,负责创建Session(相当于Connection)对象.

在Hibernate中使用c3p0连接池:
* 引入c3p0的jar包
* 在核心配置中添加一段配置:
<!-- C3P0连接池设定-->
<!-- 使用c3po连接池  配置连接池提供的供应商-->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider                                                                                                                                        </property>
<!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目  -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
 <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property>

          Session

          相当于JDBC的Connection,是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心。它是线程不安全的,Session维护了Hiberante一级缓存.

         Transaction

         hibernate的增删改都是建立在事务的基础上的,如果没开启事务,那么操作是无效的。

五、Hibernate的三种查询方式

        HQL :hibernate query language

        QBC :Query By Criteria

        Sql    :structured query language

六、记点英语

       ORM:Object Relational Mapping

       JPA:Java Persistence Api

        miscellaneous :杂七杂八的

        tips and tricks :小贴士

       semantic :语义的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值