Hibernate概述
什么是框架:
1、编程时,使用框架后,可以帮我们实现一部分功能,使用框架的好处,可以少写一部分代码实现功能。
什么是Hibernate框架
1、hibernate框架应用在JavaEE三层架构中的dao层
2、在dao层里面做对数据库的CRUD操作,使用hibernate实现CRUD操作,底层就是jdbc,hibernate是对jdbc进行封装,不需要写sql语句实现
3、hibernate是开源的轻量级框架
什么是orm思想
1、hibernate使用orm思想对数据库进行CRUD操作
2、orm:object relational mapping 对象关系映射
(1)让实体类和数据库表进行一一对应关系
让实体类首先和数据库表对应
让实体类属性和表里面字段对应
(2)不需要直接操作数据库表,而操作表对应实体类对象
Hibernate入门
搭建hibernate环境
第一步:导入hibernate的jar包
1、required_jar
2、jpa_jar
3、使用hibernate的时候,会有日志信息的输出,导入其他的日志jar包来输出日志信息
第二步:创建实体类
使用hibernate的时候,不需要手动去创建数据库表,hibernate可以帮忙创建数据库表
第三步:配置实体类和数据库的映射关系
使用配置文件实现映射的关系
(1)创建xml格式的配置文件
- 映射配置文件名称和位置没有固定要求
- 一般在实体类所在包中创建
(2)配置文件是xml格式,在配置文件中首先引入xml约束
- 在hibernate中引入dtd约束
(3)配置映射关系
第四步:创建hibernate的核心配置文件
(1)核心配置文件格式xml,配置文件的名称和位置是固定的
- 位置:必须在src下
- 名称:hibernate.cfg.xml
(2)引入dtd约束
(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
第一部分:配置数据库信息
第二部分:配置hibernate信息
第三部分:把映射文件放到核心配置文件中
实现添加操作
控制台输出
Hibernate中的配置文件
映射配置文件
1、映射配置文件名称和位置没有固定的要求
2、映射配置文件中,id和property标签中name是实体类的相关属性,column是数据库表中的相关字段
3、class标签name的值是实体类的全路径 com.demo.entity.User
4、property标签中可以用type属性来设置数据库生成表的字段的属性
核心配置文件
数据库部分+hibernate部分+映射文件部分
SessionFactory
项目中可能多次要对数据库表进行操作,若每次操作都产生一个SessionFactory对象,然后对应生成数据库中的表,是非常消耗资源的,因此通过编写一个工具类来解决这个问题,保证一个项目只有一个sessionFactory。
Session
1、session类似于jdbc中的connection
2、调用session的不同方法实现CRUD操作
· 添加save()方法
· 修改update()方法
· 删除delete()方法
· 根据id查询get()方法
3、session对象是单线程对象
实体类编写规则
1、实体类中的属性都是私有的
2、私有属性使用公开的set/get方法操作
3、要求实体类中有一个属性作为唯一值(一般使用id值)
4、实体类属性建议不适用基本数据类型,而使用基本数据类型对应的包装类
· 比如说用int类型表示学生的成绩,0分可以用int score = 0;表示,但是缺考却表示不出来,若使用int类型的包装类,则可以用null来表示缺考的学生的成绩。
Hibernate主键生成策略
1、hibernate要求实体类中有一个属性作为唯一值,对应表中的主键
2、主键生成策略有很多种
3、用的最多的是native和uuid,用uuid时主键的数据类型要是String字符串类型
Hibernate操作实体类
查询操作:session.get();
添加操作:session.save()
修改操作:session.update();
删除操作:session.delete();
实体类的三种状态
1、瞬时态:对象中没有id值,对象和session没有关联
瞬时状态就是刚new出来一个对象,还没有被保存到数据库中
User user = new User();
user.setName("test");
user.serPassword("123");
user.setAddress("china");
2、持久态:对象中有id值,对象和session有关联
持久化状态就是已经被保存到数据库中
User user = session.get(User.class,1);
3、托管态:对象中有id值,对象与session没有关联
离线状态就是数据库中有,但是session中不存在该对象
saveOrUpdate()方法:当对象为瞬时态的时候,是insert操作,当对象是托管态和持久态的时候,是update操作