什么是框架?
写程序,使用框架之后,帮我们实现一部分功能,使用框架的好处,少些一部分代码实现功能.
什么是hibernate框架?(重点)
- hibernate框架应用在javaee三层结构的dao层
- 在dao层对数据做crud操作,使用hibernate实现crud,底层代码是jdbc,hibernate对jdbc进行封装,使用hibernate的好处,不在需要写复杂的sql语句.
- hibernate是开源的轻量级框架(轻量级指的是不在需要依赖其他的jar包)
- hibernate的版本
hibernate3.x hibernate4.x hibernate5.x
4.x是一个过度版本
什么是orm思想
- hibernate使用orm思想对数据库进行crud操作
- 在web阶段学习javabean(属性私有,提供set,get方法),更正确的叫法是实体类.
- orm:object relational mapping 对象关系映射
- 持久层框架
- 持久化:将程序数据在瞬时状态(内存)和持久状态(磁盘)之间转换的机制.
- ORM思想: 对象/关系映射,完成对象数据到关系对象数据映射的机制称为对象-关系映射,简称ORM
面向对象概念 | 面向关系概念 |
---|---|
类 | 表 |
对象 | 行 |
属性 | 列 |
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作.也就是开发者采用面向对象的方式来操作关系数据库.
ORM全自动框架,可以不用在写sql语句.
session自带一级缓存
web 回顾
- javaEE三层结构
- web层 structs框架
- service层 spring框架
- dao层 hibernate框架
(1) 对数据库进行操作crud
- mvc思想
m: model 模型
v:view 视图
c:controller 控制器
hibernate入门
- jar包
<dependencies>
<!--junit依赖,用于单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--添加hibernate的核心依赖-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.12.Final</version>
</dependency>
<!--添加mysql的jdbc驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--添加log4j依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
创建实体类
(1)使用hibernate时不需要自己手动创建表,hibernate会自动创建表,自己创建也可以.-
配置实体类和数据库表的一一对应关系(映射关系)
(1) 使用xml配置文件- 映射配置文件名称和位置没有固定要求
- 建议:在实体类所在包里面创建,实体类名称hbm.xml
(2) 配置的是xml格式,在文件中首先引入xml约束,dtd
<?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核心配置文件
(1) 核心配置文件格式xml,名称和位置固定,- 名称: hibernate.cfg.xml
- 位置: 必须在src下面
(2) hibernate加载过程中,只会加载核心配置文件,其他配置文件不会加载 - 配置数据库的信息
- 配置hibernate信息
- 把映射文件放在核心配置文件中
<?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>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///springboot02?useSSL=false</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">vinllor</property>
<!--配置hibernate信息 可选-->
<property name="hibernate.show_sql">true</property>
<!--输出底层sql语句格式-->
<property name="hibernate.format_sql">true</property>
<!--hibernate帮助创建表
update 有表,更新
没表 创建-->
<property name="hibernate.hbm2ddl.auto">create</property>
<!--配置数据库方言
在mysql实现分页关键字 limit只能使用在Mysql里面
在oracle数据库中,实现分页rownum
让hibernate框架识别不同数据库的自己特有的语句-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--引入映射文件-->
<mapping resource="user.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
测试
实现添加操作
- 加载核心配置文件
- 创建sessionFactory对象
- 使用sessionFactory创建session对象
- 开启事物
- 写具体逻辑crud操作
- 提交事物
- 关闭资源
public class UserTest {
@Test
public void test() {
// 1. 加载核心配置文件
Configuration config = new Configuration();
config.configure();
//
// 2. 创建sessionFactory对象
// 读取hibernate配置文件内容,创建sessionFactory
// 在过程中,根据映射关系,在配置数据库里面将表创建
SessionFactory factory = config.buildSessionFactory();
// 3. 获取session
Session session = factory.openSession();
// 4. 开启事务
Transaction tx = session.beginTransaction();
// 5. 具体操作
User u = new User();
u.setName("靳飞");
u.setAddress("西安");
session.save(u);
// 提交事务
tx.commit();
// 6. 关闭
session.close();
factory.close();
}
}
hibernate核心api
- Configuration
// 1. 加载核心配置文件
Configuration config = new Configuration();
config.configure();
到类路径下去寻找hibernate.cfg.xml
- SessionFactory(重点)
使用configuration创建sessionFactory对象
创建sessionFactory过程中做的事情
根据核心配置文件,有数据库配置.映射文件部分,到数据库里面根据映射关系把表创建,必须有下面这句才会自动创建表
<property name="hibernate.hbm2ddl.auto">update</property>
在这个过程中,因为要不断的创建该对象,所以特别消耗资源.
在hibernate操作中,建议一个项目一般创建一个sessionFactory对象
写工具类,写静态代码块实现(静态代码块在类加载时候执行,一次)
public class HibernateFactory {
static final SessionFactory factory ;
static {
Configuration config = new Configuration();
config.configure();
factory = config.buildSessionFactory();
}
public static SessionFactory getFactory(){
return factory;
}
}
- Session(重点)
- session类似于jdbc中的connection
- 调用session里面的不同方法实现crud操作
(1) 添加 save方法
(2) 修改 update方法
(3) 删除 delete方法
(4) 根据id查询get方法
- session 单线程对象
(1) session对象只能自己使用,不可以共用
- Transaction
// 4. 开启事务
Transaction tx = session.beginTransaction();
tx.commit();
tx.rollback();
事务四个特性:
原子性 一致性 隔离性 持久性