一:hibernate(是一个开源的轻量级(就是不需要依赖其他就可以运行)框架)是应用在dao层(持久化层)的一个框架,是对数据库的crud操作(就是增删改查操作),就是对jdbc进行的封装,不在写复杂的SQL语句,只需要在配置文件中配置即可。
二:MVC思想 就是(M:模型 V:视图 C:控制器)
三:hibernate使用的是ORM思想对数据库进行crud操作
ORM(object relational mapping)对象关系映射
就是实体类和数据库的表一一对应(所以不需要操作数据库表,而是操作实体类对象即可),看下图即可
四:hibernate入门案例
4.1:入门案例的步骤:
4.1.1 导包 ..............
4.1.2 创建实体类(注: 使用hibernate不需要手动创建表,hibernate会帮把表创建,但是必须得配置才可以)
4.1.3:配置映射配置文件:
配置实体类和数据库表的一一对应关系(映射关系)————使用xml配置
xml文件的位置和名称没有固定要求(个人建议和实体类放一起,名字随意)
引入dtd的约束
配置映射关系:
4.1.4: 配置hibernate的核心配置文件
引入约束
位置:在src下面;
名称:如果单独使用hibernate时候,名称固定 是hibernate.cfg.xml(我们这里使用这个)
如果和spring一起使用的时候,名称就不固定
核心配置文件中:
第一部分:需要配置数据库的信息
第二部分:配置hibernate的信息(可选)(上面说hibernate会自动生成表,必须得配置这句话)
第三部分:配置映射文件(映入映射文件)
4.1.5 测试demo
五:hibernate的实体类的编写规则
5.1:属性私有,生成get,set方法
5.2 :要求实体类中有一个属性作为唯一值
5.3 :类型建议使用包装类型
int——Integer char——Charracter 其它都是首字母大写就可以
5.4:主键生成的策略(方式)
5.4.1:native:就是一般的那种..........
5.4.2:uuid:这里不做解释.......
六:实现crud操作
6.1:添加:
6.2:根据id查询
6.3: 修改:
6.4:删除:
七:hibernate的实体类对象的状态
6.1:瞬时态:对象里面没有id值,对象与session没有关联
就是在程序中有数据,而在数据库中没有数据,并且数据连接断开
6.2:持久态:对象里有id值,对象与session没有关联
就是在程序中和数据库中都有数据,并且数据连接没有持续连接中。
6.3:托管态:对象里面有id值,对象与session没有关联
就是在在持久态的时候,数据库的连接断开,所有程序中的数据都成为游离态
八:hibernate的一级缓存:(hibernate的缓存是一个优化的方式)
8.1:hibernate的一级缓存默认是打开的
8.2:作用范围:是session范围,session的创建到死亡
8.3:一级缓存存储的数据 必须是持久态
九:hibernate的一对多操作(重要)
9.1 :创建两个实体类:例如 客户和联系人
9.2: 让两个实体类之间互相表示
9.2.1: 在客户里表示多个联系人(使用set集合)并且生成get,set方法
9.2.2:在联系人中表示客户
9.3:配置映射关系
完成基本的配置的时候。在配置一对多的关系
9.3.1:在客户映射文件中:表示所有联系人
9.3.2:在联系人的映射文件中,表示所属客户
9.4:创建核心配置配件
引入映射配置文件....
十:测试一对多demo
这样写的时候:需要一个在多的一方中配置一下
其他操作略去..................
十一:多对多操作
11.1:创建两个实体类
11.2:两个类互相表示(都用set集合表示)
11.3: 在映射配置文件中互相表示(以角色和用户来举例)
11.4:在核心配置文件中引入映射文件
十二:多对多级联保存
12.1:根据用户保存角色
12.1.1:在用户的映射文件中set标签中进行配置
12.1.2:写代码
创建用户和角色对象,把角色放到用户里面,最终保存用户就可以了
//演示多对多修级联保存
@Test
publicvoid testSave() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
//得到sessionFactory
sessionFactory = HibernateUtils.getSessionFactory();
//得到session
session = sessionFactory.openSession();
//开启事务
tx = session.beginTransaction();
//添加两个用户,为每个用户添加两个角色
//1 创建对象
User user1 = new User();
user1.setUser_name("lucy");
user1.setUser_password("123");
User user2 = new User();
user2.setUser_name("mary");
user2.setUser_password("456");
Role r1 = new Role();
r1.setRole_name("总经理");
r1.setRole_memo("总经理");
Role r2 = new Role();
r2.setRole_name("秘书");
r2.setRole_memo("秘书");
Role r3 = new Role();
r3.setRole_name("保安");
r3.setRole_memo("保安");
//2 建立关系,把角色放到用户里面
// user1 --r1/r2
user1.getSetRole().add(r1);
user1.getSetRole().add(r2);
// user2-- r2/r3
user2.getSetRole().add(r2);
user2.getSetRole().add(r3);
//3 保存用户
session.save(user1);
session.save(user2);
//提交事务
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally {
session.close();
//sessionFactory不需要关闭
sessionFactory.close();
}
}
其他操作略去................
十三:hibernate的查询方式
13.1:对象导航擦查询
查询某个客户里面所有联系人过程,使用对象导航实现

13.2:oid查询
13.3:hql查询:
13.4:QBC查询