Hibernate
一.JavaEE三层架构
1.Web层 Struts2
2.Service层 spring
3.Dao层 hibernate mybatis 对数据库实现增删查改
二.MVC思想
1.Model
2.View
3.Controller
三.Hibernate概述
什么是框架:使用框架后,框架可以帮我们实现一部分内容,对于程序员来说,我们可以少写一部分代码实现功能。
什么是hibernate框架:
1.hibernate框架应用在javaee三层架构中的dao层里(hibernate使用的地方)
2.在dao层里面做数据库的增删查改,使用hibernate实现crud操作,其底层就是我们所学的jdbc,它是对jdbc进行了封装。
3.使用hibernate好处:不需要写复杂的jdbc代码,不需要写sql语句实现
4.Hibernate是开源的轻量级的框架
5.Hibernate版本 hibernate 3.x hibernate 4.x--过渡版本 hibernate 5.x--现在用的
什么是ORM思想
ORM(Object Ranational Mapping) 对象关系映射
:把对象根据一定的映射规则映射到关系型数据库中
1.让实体类的属性和表里的字段形成一一对应的关系
2.不需要直接操作数据库表,而只需要操作表对应的实体
画图分析
类 表
属性 字段
Java类型 数据库类型
ORM框架 :hibernate mybatis
持久化:将程序数据在瞬时状态和持久状态之间转换的机制/过程
ORM是完成持久化的一种思想
四.Hibernate的使用
1.导入架包
2.创建实体
3.写映射配置文件---让实体类和数据库表一一对应 映射关系
4.创建hibernate核心配置文件
a) 配置数据库信息
b) 配置hibernate信息
c) 配置映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///vote?useUnicode=true&characterEncoding=UTF8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- 3. 加载所有映射 -->
<mapping resource="com/bdqn/pojo/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
5.实现添加操作
实现步骤:
a) 加载配置文件
b) 创建sessionFactory
c) 使用sessionFactory创建session
d) 开启事务
e) 写crud逻辑
f) 提交事务
g) 关闭资源
四.Hibernate配置文件详解
五.Hibernate核心api
1.Configuration
到src下面去找hibernate.cfg.xml核心配置文件,创建对象,把配置文件放到类路径里
2.SessionFactory
使用Configuration创建sessionFactory对象
3.Session
Session 就好比jdbc 里的 conn
Session里有操作数据库的相关方法
Session是单线程对象
4.Transaction
load和get方法区别
此时返回的是一个代理对象,这个对象只有有id
六.Hibernate中对象的三个状态
瞬时 (Transient )/临时状态/自由状态
持久 (Persistent)
脱管 (Detached)
瞬时对象特征:
第一、不处于 Session 的缓存中,也可以说,不被任何一个 Session 实例关联。
第二、在数据库中没有对应的记录。
持久化对象特征:
第一、持久化对象总是被一个 session 关联。
第二、持久化对象与数据库中的记录对应。
第三、Session清理缓存的时候,会根据持久化对象的改变,更新数据库。
脱管对象特征:
第一、Session断开关联
第二、持有OID
2.三种状态的区别分析:
只要与session关联的就是持久态。
Session没关联,没有OID就是瞬时状态。
Session没关联,有OID的就是游离状态。