文章目录
1 Hibernate概述
1.1 框架的含义
其实框架,就是别人写好了包装起来的一套工具,把你原先必须要写的,必须要做的一些复杂的东西都写好了放在那里,你只要调用他的方法,就可以实现一些本来要费好大劲的功能。使用框架之后,它可以帮我们实现一部分功能,使用框架好处就是可以少写一部分代码实现功能
1.2 Hibernate框架
1.Hibernate框架应用在javaEE三层结构中的dao层框架。
javaEE三层结构:
- web层
- service层
- dao层
2.在dao层里面做对数据库的增删改查操作,使用Hibernate框架实现增删改查操作。Hibernate底层就是jdbc,对jdbc的轻量级的封装,使用Hibernate不需要写复杂的jdbc代码。
3.Hibernate是开源的、轻量级的框架。轻量级的框架:Hibernate不需要依赖其他的东西就可以直接使用。
4.Hibernate版本
Hibernate3.x
Hibernate4.x(过渡)
Hibernate5.x
1.3 orm思想
-
hibernate使用orm思想对数据库进行crud操作;
-
orm即“object relational mapping”,对象关系映射
❀让实体类和数据库表进行一 一对应关系。实体类首先和数据库表对应,然后实体类里面的属性和表里面的字段逐一对应。
❀不需要直接操作数据库表,而操作表对应的实体类对象。
例:
- 实体类:
public class User{
private int uid;
private username;
private password;
}- 数据库建表语句:
create table t_user(
uid int,
username varchar(255),
password varchar(255)
)
类User对应表t_user
类属性uid对应表字段uid…以此类推
2 Hibernate入门
2.1 环境搭建
2.1.1 导jar包
除了hibernate本身需要的一些jar包之外,还要导入数据库驱动jar包,以及一些日志jar包(因为使用hibernate时,有日志信息输出,hibernate本身没有日志输出的jar包,需导入其他日志的jar包)。
jar包
链接:https://pan.baidu.com/s/1E36zuMxUElEtBr7nToLCAA
提取码:w8mm
2.1.2 创建实体类
使用hibernate时,不需要自己手动创建表,hibernate会帮把表创建
2.1.3 使用配置文件实现映射关系
- 创建xml配置文件
- 映射配置文件名称和位置没有固定要求
- 建议在实体类所在包里面创建,名称设为:实体类名称.hbm.xml
- 引入约束(hibernate引入的是dtd约束)
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
- 配置映射关系
<hibernate-mapping>
<class name="cn.itcast.entity.User" table="t_user">
<!-- name里面填实体类的全路径,table里是对应的表名称(可以自定义) -->
<id name="uid" column="uid">
<!-- native:主键自动增长 -->
<generator class="native"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
<!-- name里是实体类的属性名,column里是数据库表里的字段名(可以自定义,建议与属性名一致) -->
</class>
</hibernate-mapping>
- id标签和property标签里的column属性可以省略,省略之后column值默认等于name的值。
- property标签有type属性,可设置生成表字段的类型,如果省略则根据实体类中属性的类型为字段自动对应类型。
2.1.4 创建hibernate的核心配置文件
- 核心配置文件同样是xml格式
- 核心配置文件名称和位置是固定的
位置:必须在src下面
名称:必须是 hibernate.cfg.xml
- 引入约束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
注意核心配置文件的约束与映射配置文件的约束是不一样的。
hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
2.配置数据库等信息
<hibernate-configuration>
<session-factory>
<!-- 1、配置数据库信息 必须有的-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 2、配置hibernate信息 可选的-->
<!-- 输出底层sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 输出底层sql语句格式 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate帮创建表,需配置之后
update:如果已经有表,更新;
如果没有,创建。
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置数据库方言 不做分页可以不写(可选的)
让hibernate框架识别不同数据库的自己特有的语句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 3、把映射文件放到核心配置文件中 -->
<mapping resource="cn/itcast/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
注意:数据库需手动新建
配置信息需写在下面标签内:
2.2 功能实现
实现步骤:
- 加载hibernate核心配置文件
- 创建SessionFactory对象
- 使用SessionFactory创建session对象
- 开启事务
- 写具体逻辑 crud操作
- 提交事务
- 关闭资源
package cn.itcast.hibernatetest;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cn.itcast.entity.User;
public class HibernateDemo {
@Test
public void testAdd(){
// 1、加载hibernate核心配置文件
// 到src下面找到名称是hibernate.cfg.xml
Configuration cfg=new Configuration();
cfg.configure();
// 2、创建SessionFactory对象
//读取hibernate核心配置文件内容,创建sessionFactory
//在这个过程中,根据映射关系,在配置数据库里面把表创建
SessionFactory sessionFactory= cfg.buildSessionFactory();
// 3、使用SessionFactory创建session对象
//类似连接
Session session=sessionFactory.openSession();
// 4、开启事务
Transaction tx=session.beginTransaction();
// 5、写具体逻辑crud操作
//添加功能
User user=new User();
user.setUsername("霓裳");
user.setPassword("872");
user.setAddress("China");
//调用session的方法实现添加
session.save(user);
// 6、提交事务
tx.commit();
// 7、关闭资源
session.close();
sessionFactory.close();//web中不需要关闭
}
}
Configuration cfg=new Configuration().configure("xml文件位置");
// 以上写法hibernate会去指定位置查找配置文件,
//例如:想要使用src下config包中的hibernate.cfg.xml文件,只需将文件位置加入configure()即可:
Configuration cfg=new Configuration().configure("/config/hibernate.cfg.xml");
运行结果:
2.3 Hibernate核心api介绍
API:Application Programming Interface,应用程序接口
2.3.1 Configuration
Configuration cfg=new Configuration();
cfg.configure();
该接口会到src下面找到名称为hibernate.cfg.xml的配置文件,创建对象之后,把配置文件放到对象里面(即加载核心配置文件)。
2.3.2 SessionFactory
SessionFactory sessionFactory= cfg.buildSessionFactory();
使用configuration对象创建sessionFactory对象,在创建sessionfactory过程时,根据核心配置文件中有关数据库和映射文件的配置,到数据库里面根据映射关系把表创建。
<!-- hibernate帮创建表,需配置之后
update:如果已经有表,更新;
如果没有,创建。
-->
<property name="hibernate.hbm2ddl.auto">update</property>
创建sessionFactory这个过程是特别耗资源的,建议一个项目一般创建一个sessionFactory对象。
可以通过工具类写静态代码块实现:
- 静态代码块在类加载的时候执行,只执行一次
package cn.itcast.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static Configuration configuration=null;
private static SessionFactory sessionFactory=null;
static{
configuration=new Configuration();
configuration.configure();
sessionFactory=configuration.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
2.3.3 Session
- session类似于jdbc中connection
- 调用session里面不同的方法实现crud操作
(1)添加 save方法
(2)修改 update方法
(3)删除 delete方法
(4)根据id查询 get方法- session对象是单线程对象,不能共用,只能自己使用
2.3.4 Transaction
代表事物对象
开启事务:
Transaction tx=session.beginTransaction();
提交事务:
tx.commit();
回滚方法:
tx.rollback();
给大家分享hibernate学习视频链接:https://www.bilibili.com/video/av14538659?p=1