hibernate

hibernate数据库框架

ORM对象关系映射框架hibernate

  • hibernate是一款ORM数据库框架,以面向对象的思维操作数据库。
  • hibernate支持多种数据库,只需要在配置文件中书写数据库的方言,hibernate就能做到与数据无关。
  • hibernate支持具有自动建表的功能,能过根据实体类创建数据库表。

hibernate框架的配置文件

1.五项必选的配置文件
#hibernate.dialect org.hibernate.dialect.MySQLDialect
    #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
    #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
    #hibernate.connection.driver_class com.mysql.jdbc.Driver
    #hibernate.connection.url jdbc:mysql:///test
    #hibernate.connection.username gavin
    #hibernate.connection.password
             <!-- 数据库驱动 -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
     <!-- 数据库url -->
    <property name="hibernate.connection.url">jdbc:mysql:///hibernate_32</property>
     <!-- 数据库连接用户名 -->
    <property name="hibernate.connection.username">root</property>
     <!-- 数据库连接密码 -->
    <property name="hibernate.connection.password">1234</property>
    <!-- 数据库方言
        不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
        sql99标准: DDL 定义语言  库表的增删改查
                  DCL 控制语言  事务 权限
                  DML 操纵语言  增删改查
        注意: MYSQL在选择方言时,请选择最短的方言.
     -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
2.三项可选配置
<!-- #hibernate.show_sql true 
         #hibernate.format_sql true
    --><!-- 将hibernate生成的sql语句打印到控制台 -->
    <property name="hibernate.show_sql">true</property>
    <!-- 将hibernate生成的sql语句格式化(语法缩进) -->
    <property name="hibernate.format_sql">true</property>
    <!-- 
    ## auto schema export  自动导出表结构. 自动建表
    #hibernate.hbm2ddl.auto create      自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
    #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
    #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
    #hibernate.hbm2ddl.auto validate    校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
     -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- 引入orm元数据
        路径书写: 填写src下的路径
     -->
     <!-- 指定hibernate操作数据库时的隔离级别 
        #hibernate.connection.isolation 1|2|4|8     
        0001    1   读未提交
        0010    2   读已提交
        0100    4   可重复读
        1000    8   串行化
     -->
     <property name="hibernate.connection.isolation">4</property>
4.加入元数据的配置文件
 <!-- 指定session与当前线程绑定 -->
    <mapping resource="XX/xx/XX.hbm.xml" />

元数据的配置方式

<hibernate-mapping package="xx.xx.xx" >//该处用于类设置别名
<class name="Customer" table="cst_customer" >
    <id name="cust_id"  >
        <!-- generator:主键生成策略.就是每条记录录入时,主键的生成规则.(7个)
                identity : 主键自增.由数据库来维护主键值.录入时不需要指定主键.
                sequence: Oracle中的主键生成策略.
                increment(了解): 主键自增.由hibernate来维护.每次插入前会先查询表中id最大值.+1作为新主键值.            
                hilo(了解): 高低位算法.主键自增.由hibernate来维护.开发时不使用.
                native:hilo+sequence+identity 自动三选一策略.
                uuid: 产生随机字符串作为主键. 主键类型必须为string 类型.
                assigned:自然主键生成策略. hibernate不会管理主键值.由开发人员自己录入.

         -->
        <generator class="increment"></generator>
    </id>
    <property name="cust_name" column="cust_name" ></property>
    <property name="cust_source" column="cust_source" ></property>
    <property name="cust_industry" column="cust_industry" ></property>
    <property name="cust_level" column="cust_level" ></property>
    <property name="cust_linkman" column="cust_linkman" ></property>
    <property name="cust_phone" column="cust_phone" ></property>
    <property name="cust_mobile" column="cust_mobile" ></property>
</class>
</hibernate-mapping>

主键生成策略

1.xxx.hbm.xml配置文件中支持的主键生成策略
主键生成策略名称策略的含义
sequence Oracle中的主键生成策略.
increment(了解)主键自增.由hibernate来维护.每次插入前会先查询表中id最大值.+1作为新主键值.
hilo(了解)高低位算法.主键自增.由hibernate来维护.开发时不使用.
nativehilo+sequence+identity 自动三选一策略.
identity 主键自增.由数据库来维护主键值.录入时不需要指定主键.
uuid 产生随机字符串作为主键. 主键类型必须为string 类型.
assigned自然主键生成策略. hibernate不会管理主键值.由开发人员自己录入.
2.注解配置中支持的主键生成策略

持久化类的三种状态

  • 瞬时状态:没有id,没有与session建立联系
  • 持久化状态:与session产生关联,有id值。持久化状态的任何变化都会同步到数据库中
  • 游离状态:关闭session对象

hibernate中的一级缓存

1. hibernate的缓存,主要是用于提高数据库操作的效率
2. hibernate缓存的原理

3. hibernate中的缓存的快照

4. hibernate一级缓存

1.hibernate中的一级缓存指的是session,会在session中开辟一块内存专门用于数据的缓存
2.二级缓存主要值得是sessionFatory。
3.因为sessionFactory本身消耗表较大的内存,如果是大量数据的缓存,建议使用redis等缓存工具。

hibernate中的事务控制

事务的特性
  • 一致性
  • 原子性
  • 隔离性
  • 持久性
事务并发产生的问题

脏读,读取到没有提交的数据
幻读 在删除所有数据的同时,插入数据,导致似乎数据没有被完全的删除
不可重复读 两次读取的数据不一致

事务的隔离级别
  1. 读未提交1 没有解决脏读,幻读,不可重复读中的任何问题
  2. 读已提交2 没有解决幻读和不可重复读
  3. 可重复读4(mysql默认的隔离级别)为解决不可重复读问题
  4. 串行化8 解决事务并发产生的所有的问题,但是效率很低。
hibernate中主要是通过session对象来管理事务

session.beginTransaction开启事务

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值