hibernate5.0&映射配置文件&核心配置文件&数据更新丢失

映射文件基本配置

约束需要对应版本查询
    
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
       "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

    
         
       
           
           
               
               
           

            
           
           
       

   

配置标签详解

 - 映射文件,即Stu.hbm.xml的配置文件
标签        -- 用来将类与数据库表建立映射关系
    name     -- 类的全路径
    table    -- 表名.(类名与表名一致,那么table属性也可以省略)
    catalog  -- 数据库的名称,基本上都会省略不写
        
标签-- 用来将类中的属性与表中的主键建立映射,id标签就是用来配置主键的。
    name     -- 类中属性名
    column      -- 表中的字段名.(如果类中的属性名与表中的字段名一致,那么column可以省略.)

    length     -- 字段的程度,如果数据库已经创建好了,那么length可以不写。如果没有创建好,生成表结构时,length最好指定。

主键生成策略

标签 --使用框架管理主键(自己在操作对象时不需要set设置javabean的主键了),主键生成策略
    class  --使用什么策略

 - native 数据表主键自动增长,数据数据库调用identity或者sequence)(一般使用int和long的包装类做主键)
 - increment 获取数据表主键最大值,进行+1,作为主键
 - identity 数据表主键自动增长(只有mysql可以,oracle数据库没有自动增长)
 - sequence 数据表自动增长(回调函数实现oracle可以,mysql不行)
 - uuid 主键为字符串时使用
 - assigned 主键是自己维护的,不使用Hibernate框架维护(需要自己每次操作对象时存储)

    
    -- 用来将类中的普通属性与表中的字段建立映射.
    name        -- 类中属性名
    column        -- 表中的字段名.(如果类中的属性名与表中的字段名一致,那么column可以省略.)
    length        -- 数据长度
    type        -- 数据类型(一般都不需要编写,如果写需要按着规则来编写)
 - Hibernate的数据类型    type="string"
 - Java的数据类型        type="java.lang.String"
 - 数据库字段的数据类型    

映射注解配置方式

[`查看此链接`][1]

核心配置配置文件

约束需要对应版本查询
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

   
       
       
           

           
            com.mysql.jdbhc.Driver
            jdbc.mysql://hibernate_day01
            账号密码
            密码
           
            org.hibernate.dialect.MySQLDialect
            
           
            true
            true
            create
            update

           
           
       

   

可选配置详情

在控制台显示sql语句
true

显示的sql语句,格式化(不会全部在一行)
true

同过hibernate设置隔离级别
一般不需要设置,使用默认就ok(除非有需求), [可以查看事务概述][2]
4
可选值
 - 1—Read uncommitted isolation  -未提交读:以上的读的问题都有可能发生.
 - 2—Read committed isolation      -已提交读:避免脏读,但是不可重复读,虚读都有可能发生.
 - 4—Repeatable read isolation       -可重复读:避免脏读,不可重复读.但是虚读是有可能发生.
 - 8—Serializable isolation               -串行化:以上读的情况都可以避免.

对数据表结构进行操作
  validate
可选值
 - create 生成数据表结构,如果有表删除再创建
 - create-drop 生成数据表结构,执行完sql语句,删除表
 - update 如果没有表结构,创建表结构.如果有存在,不会创建,添加数据,如果字段不存在生成字段(一般使用)
 - validate 校验映射文件中的javabean属性对应的数据库字段名称
 - property 标签中的配置可以去hibernate(下载解压后的文件)文件下面的`project/ect/hibernate.properties`找
将session放入线程中,从线程中取出session(用于在业务层开启,提交,回滚事务,dao层从线程中获取session)

开启事务
thread

数据更新丢失

如果不考虑隔离性,也会产生写入数据的问题,这一类的问题叫丢失更新的问题。
  例如:两个事务同时对某一条记录做修改,就会引发丢失更新的问题。
    A事务和B事务同时获取到一条数据,同时再做修改
    如果A事务修改完成后,提交了事务
    B事务修改完成后,不管是提交还是回滚,如果不做处理,都会对数据产生影响

使用Hibernate框架解决丢失更新的问题
悲观锁
    使用session.get(Customer.class, 1,LockMode.UPGRADE); 方法
        
乐观锁
    1.在对应的JavaBean中添加一个属性,名称可以是任意的。例如:private Integer version; 提供get和set方法
    2.在映射的配置文件中,提供标签即可。

你可能感兴趣的:(Java,hibernate)