Hibernate概述
1.什么是Hibernate框架
- hibernate框架应用在javaee三层结构中 dao层框架
- 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,不需要写sql语句实现。
- 并且,hibernate是开源的轻量级的框架。
2.理解ORM思想
简单来说orm就是一种映射思想。在Hibernate中,我们把数据库中的表与实体类(也就是JavaBean,后面统称为实体类)进行一对一的映射,数据库中表的字段与实体类的属性一一映射。如下图所示:
我们只需要操作实体类和实体类的属性,Hibernate在底层会根据我们的操作而对数据库的表和字段进行crud。换句话来说,就是让我们程序员更专心地进行代码的编写工作。
3.Hibernate入门
3.1 搭建hibernate环境
1>>> new一个Project
第一次打开的话可能要下载一些配置文件,所以可能会有点慢,接下来就等着………………
2 >>> 检查所需jar包
现在我们有Jdk中的一些jar包、Hibernate的一些Jar包、WebApplication所需的一些jar包。但我们还需要添加一个Mysql的connector包。
这时候我们可以把我们的项目升级为maven项目,这样就不用我们自己辛辛苦苦去网上找jar包了。
这样我们就把自己的项目升级为一个Maven项目了,我们可以在下面的pom.xml里面引包了。
<dependencies>
<!--mysql的依赖,因为下面我们用的也是mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--这是用来便于测试的依赖,在方法的上面添加@test标签来使用-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
<scope>compile</scope>
</dependency>
</dependencies>
添加依赖后,需要将包放入lib包里面,在idea里面可以用快捷键Ctrl+Shift+Alt+s进入下面这个页面:
进行上列操作后,我们可以看到
3.2 创建实体类
- 添加自定义属性和get、set、toString方法
3.3 配置实体类和数据库表一一对应关系(映射关系)
-
创建Hibernate的xml格式的配置文件(建议名称:实体类名称.hbm.xml)
-
配置是是xml格式,在配置文件中首先引入dtd约束,这边教你们怎么找
这样就把dtd约束引人进来了
-
配置映射关系(重点⭐)
<hibernate-mapping>
<!-- 1 配置类和表对应
class标签
name属性:实体类全路径
table属性:数据库表名称
-->
<class name="edu.jxutcm.entity.Product" table="product">
<!-- 2 配置实体类id和表id对应
hibernate要求实体类有一个属性唯一值
hibernate要求表有字段作为唯一值
-->
<!-- id标签
name属性:实体类里面id属性名称
column属性:生成的表字段名称
-->
<id name="pid" column="pid">
<!-- 设置数据库表id增长策略
native:生成表id值就是主键自动增长
-->
<generator class="native"></generator>
</id>
<!-- 配置其他属性和表字段对应
name属性:实体类属性名称
column属性:生成表字段名称
-->
<property name="pname" column="pname"></property>
<property name="count" column="count"></property>
<property name="price" column="price"></property>
</class>
</hibernate-mapping>
3.4 创建hibernate的核心配置文件(重点⭐)
- 核心配置文件格式xml,但是核心配置文件名称和位置固定的
- 位置:必须src下面(建议放入resouces文件夹内)
- 名称:必须hibernate.cfg.xml
同上面的.hbm.xml文件一样找到hibernate-configuration-3.0.dtd引入dtd约束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate/dtd/hibernate-configuration-3.0.dtd">
- hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
- 配置数据库信息 必须的
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatetest1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">mysql123</property>
- 配置hibernate信息 可选的
<!--配置数据库方言-->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
- 配置数据库方言
<!-- 指定自动生成数据表的策略 -->
<property name="hibernate.hbm2ddl.auto">update</property>
- 配置映射路径
<!--配置映射路径-->
<mapping resource="User.hbm.xml"/>
3.5 实现添加操作(Hibernate入门案例 重点⭐)
实现添加操作包含以下几步:
第一步 加载hibernate核心配置文件
第二步 创建SessionFactory对象
第三步 使用SessionFactory创建session对象
第四步 开启事务
第五步 写具体逻辑 crud操作
第六步 提交事务
第七步 关闭资源
这边test文件夹是专门用来进行测试的,所以在绿色的Java文件夹下new一个测试类。
下面是一个不规范的模板
public class HibernateTest {
//添加@test标签是表示此方法为测试方法,可以直接运行的
@Test
public void testAdd(){
//加载hibernate核心配置文件
Configuration cfg = new Configuration();
cfg.configure();
//创建sessionFactory工厂
SessionFactory sessionFactory = cfg.buildSessionFactory();
//创建session对象
Session session = sessionFactory.openSession();
//开启事务
Transaction tx = session.beginTransaction();
//写具体逻辑,下面写的增删改查之类的操作可直接放入进来
//提交事务
tx.commit();//用tx.rollback是进行回滚
//关闭资源
session.close();
sessionFactory.close();
}
}
具体逻辑里面可以添加一个产品“coffer”
//写具体逻辑
Product product = new Product();
product.setPname("coffer");
product.setCount(50);
product.setPrice(8.5);
session.save(product);
3.6 连接数据库(万事俱备,只欠东风)
好了,现在我们测试一下hibernate是否能自动帮我们建表及其字段。
点开我们的HibernateTest类,并运行之:
我们可以在控制台上看到以下信息
这些是Hibernate为我们自动创建的建表语句,以及为我们自动添加的增加字段的语句。
然后再刷新一下我们的数据库,我们可以看到表和字段已经建好了
4 Hibernate配置文件详解
4.1 Hibernate映射配置文件(重点⭐)
1 映射配置文件名称和位置没有固定要求
2 映射配置文件中,标签name属性值写实体类相关内容
(1)class标签name属性值实体类全路径
(2)id标签和property标签name属性值 实体类属性名称
3 id标签和property标签,column属性可以省略的
(1)不写值和name属性值一样的
4 property标签type属性,设置生成表字段的类型,自动对应类型
4.2 Hibernate核心配置文件
- 配置三部分要求
(1)数据库部分必须的
(2)hibernate部分可选的
(3)映射文件必须的
- 核心配置文件名称和位置固定的
(1)位置:src下面 (建议在resouses里面)
(2)名称:hibernate.cfg.xml
4.3 Hibernate核心api
- Configuration代码:
Configuration cfg = new Configuration();
cfg.configure();
到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
- SessionFactory(重点)
- 使用configuration对象创建sessionFactory对象
(1)创建sessionfactory过程中做事情:
根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
-
创建sessionFactory过程中,这个过程特别耗资源的
(1)在hibernate操作中,建议一个项目一般创建一个sessionFactory对象 -
具体实现
(1)写工具类,写静态代码块实现
静态代码块在类加载时候执行,执行一次
日后再需要使用sessionFactory的时候直接调用就可以了
4.4Session(重点⭐)
-
session类似于jdbc中connection
-
调用session里面不同的方法实现crud操作
(1)添加 save方法
(2)修改 update方法
(3)删除 delete方法
(4)根据id查询 get方法 -
session对象单线程对象
(1)session对象不能共用,只能自己使用
4.5 Transaction
1 事务对象
//开启事务
Transaction tx = session.beginTransaction();
2 事务提交和回滚方法
tx.commit();
tx.rollback();
3 事务概念
(1)事务四个特性
原子性、一致性、隔离性、持久性
特别地:如果无法实现回滚效果,是因为Hibernate自动创建的表类型为MyISAM。我们可以新建表查询输入下列语句,将类型更改为INNODB,这样就支持事务处理了,可以实现回滚功能。
Alert TABLE tablename ENGING = INNODB;
(MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理。)
更多推荐
新手上路之Hibernate入门和基本操作
发布评论