1、基本步骤
1.1 创建web工程
1.2 添加jar包(11个) hibernate 10个 mysql驱动 1个
1.3 持久化类 pojo 实体类
1. 无参构造方法
2. public 的 set/get方法
3. 成员变量私有
4.成员变量尽量使用包装类型。包装类型具有对象的属性和方法。
5.必须要有一个 oid(唯一标识) 和数据库表中的主键对应
6.该类不能用final修饰
1.4 元数据配置文件 持久化类名 .hbm.xml
1.5 主配置文件 hibernate.cfg.xml 启动和初始化 hibernate框架,加载映射文件
1.6 测试
1、读取配置文件 Configuration c = new Configuration() c.configure();
2 SessionFactory factory = c.buildSessionFactory(); 一个程序就一个SeessionFactory
3、 Session s = factory.openSession(); 线程不安全,每次要创建一个 新的Session 类似于 Connection
4、对数据操作(增删改查)
5、关闭资源 s.close()
2、主键生成策略
<id>
<generator class="native">
<generator/>
</id>
主键的类型(2种)
自然主键:开发者自己维护管理主键。(数据库操作的时候必须手动插入)
assigned;
代理主键:Hibernate帮助去维护和管理主键。
native :根据数据库平台选择 mysql :identity (常用)
identity:自动增长(int,long,short),只在支持主键自动增长的数据库使用。mysql支持,oracle不支持自动增长
sequence: oracle使用
increment:自动增长(int,long,short)。先查询表中最大的id值,最后最大的id加1作为新的主键插入
uuid:适用于 char,varchar. 32位的16进制的字符串。占用空间大(常用)
3、数据库生成策略
update:没有表就创建,有表就直接进行数据库操作
create: 先删除存在的表(drop table if exists 表名 ),再去创建新的表去操作。
create-drop:先删除存在的表,再去新建表去操作。操作完后直接删除表
sessionFactory.close()
validate: 不创建表,开发者自己创建表。校验持久化类中的变量类型和数据库中表中的列是否一致。
4、Hibernate操作事务的方法
开启事务:session.beginTransaction();
提交事务:session.commit();
回滚事务:session.rollback();
事务: 1、概念:在一个业务逻辑操作上的一系列动作 要么全部成功,要么全部失败
2、jdbc如何操作事务?
已转账为例:
开启事务: connection.setAutoCommit(false);
提交事务: connection.commit();
回滚事务: connection.rollback();
TheadLocal 存储线程的局部变量
3、事务面试要问的:
1、事务特性:
原子性。一致性。持久性。隔离性。
2、事务并发访问可能会出现的问题:
脏读(读未提交),不可重复读(读已提交,关注点是某一行),
虚读(幻读)(对整个表进行插入或者删除操作)
3、事务的隔离级别:
READ UNCOMMITED 都可能会发生
READ COMMITED 避免脏读
repeatable read; 避免脏读和不可重复读
serializable 可串行化 都不会发生
查看数据库的隔离级别:
select @@tx_isolation;
设置隔离级别:
set transaction isolation (level )