映射文件基本配置
约束需要对应版本查询
"-//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.在映射的配置文件中,提供
标签即可。