JavaEE 三层结构:
web层 :struts2
server层 : Spring
dao层 : Hibernate 对数据库进行crud操作
MVC思想:model view controller
Hibernate
- 底层实际上是对 jdbc 进行封装
- 开源轻量级框架
- 目前使用 Hibernate5 版本
ORM 思想
- hibernate 使用orm思想对数据进行crud操作
- 使用实体类
-
orm:object relational mapping 对象关系映射
创建hibernate 配置文件
- 文件名: hibernate.cfg.xml
- 引入 dtd 约束
配置Hibernate
(1) 配置数据库信息
(2) 配置hibernate信息
(3) 配置 映射文件
映射文件细节注意:
- class标签 name属性值为实体类全路径名
- id标签和property标签 name属性值, 实体类属性名称
- column 可以不写,不写的话会默认和name值保持一致
核心配置文件细节注意:
- 配置文件位置固定,src目录下
- 固定文件名 hibernate.cfg.xml
核心api
加载 hibernate.cfg.xml文件
Configuration config = new Configuration().config();
SessionFactory (重点)
- 使用 Configuration 对象可以创建该对象
- 创建 sessionFactory 这个过程特别耗资源(可使用静态代码块来实现,保证整个系统中只创建一次)
Session
- 类似于jdbc中的connection
- 调用session里面的不同的方法实现crud操作
- session 对象是单线程对象(session只能自己使用,不能公用)
Transaction
-
事务对象
Transaction tx = session.beginTransaction();
-
事务提交和回滚操作
tx.commit(); tx.rollback();
-
事务概念
- 原子性
- 一致性
- 隔离性
- 持久性
Query 对象
-
使用Query查询,不需要写sql语句,但是需要写 hql语句
// 1 创建Query对象 Query query = session.createQuery("from User"); // 2 调用Query对象的方法得到对象 List<User> users = query.list();
Criteria 对象
// 1 创建Criteria 对象
Criteria criteria = session.createCriteria (User.class);
// 2 调用Criteria 对象的方法得到对象
List<User> users = criteria.list();
SQLQuery 对象
// 创建对象
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
sqlQuery.addEntity(User.class);
List<User> list = sqlQuery.list();
配置文件没有提示
- 可以上网,就能有提示,因为约束文件可以加载到
- 不能上网,可以把约束文件导入到eclipse中
实体类编写规则
- 实体类中的属性都是私有的
- 实体类中的set和get方法都是公有的
- 实体类中要有属性是唯一的(一般使用id值)
- 实体类属性建议不使用基础数据类型,建议使用基础类的包装类
- 比如表示学生的分数 int score;
- 比如表示学生得了 0 分, int score = 0;
- 学生没有参加考试 ,int score = null; 不可行,此时使用包装类 Integer 即可解决问题
Hibernate 主键生成策略
- native : 根据实际使用的数据库选择合适的值
- uuid : 生成 uuid 作为 主键值
- 主键的属性需要设置为 String 类型
<generator class="uuid"></generator>
- 主键的属性需要设置为 String 类型
对实体类进行增删改查操作
实体类对象状态
- 瞬时态 : 对象里边没有id,跟session也没有关联
- 持久态 : 对象里边有id,跟session有关联
- 托管态 : 对象里边有id,跟session无关联
Hibernate 的一级缓存
什么是缓存
- 把数据存到内存中,不使用流的方式,可以直接从内存中取数据
- 把数据放在内存中,提高读取效率
Hibernate 事务代码规范写法
Session 绑定线程