文章目录
- 一、web内容回顾
- 1. JavaEE三层结构
- 1.1 web层:struts2框架
- 1.2 service层:spring框架
- 1.3 dao层:hibernate框架
- 2. MVC思想
- 3. Struts2和Hibernate的结合实现MVC思想
- (1). 结构导图
- (2). 比较导图
- 二、hibernate概述
- 1. 什么是框架
- 2. 什么是hibernate框架
- 3. ORM思想
- 4. Hibernate体系结构
- 三、hibernate入门案例
- 1. 搭建hibernate环境
- 1.1 导入hibernate的jar包
- 2. 创建实体类
- 3. 配置实体类和数据库表一一对应关系(映射关系)
- 3.1 创建xml格式的配置文件
- 3.2 如果配置文件是xml格式,在配置文件中首先引入xml约束
- 3.3 配置映射关系
- 4. 创建hibernate的核心配置文件
- 4.1 核心配置文件格式是xml,但是核心配置文件名称和位置固定的
- 4.2 引入dtd约束
- 4.3 hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
- 5. 进行测试
- 四、hibernate配置文件详解
- 1. hibernate映射配置文件
- 2. hibernate核心配置文件
- 五、hibernate的核心api
- 1. Configuration
- 2. SessionFactory:Session工厂
- 3. Session
- 4. Transaction
- 六、hibernate配置错误问题处理
一、web内容回顾
1. JavaEE三层结构
1.1 web层:struts2框架
1.2 service层:spring框架
1.3 dao层:hibernate框架
- 对数据库进行crud(增删改查)操作
2. MVC思想
- m:模型
- v:视图
- c:控制器
3. Struts2和Hibernate的结合实现MVC思想
(1). 结构导图
(2). 比较导图
传统Servlet使用MVC思想和使用Struts2+Hibernate结合的MVC思想比较
二、hibernate概述
1. 什么是框架
写一个程序,使用框架之后,帮我们实现一部分功能,而使用框架好处,我们少写一部分代码实现功能。
2. 什么是hibernate框架
- hibernate翻译为冬眠
- hibernate框架应用在Javaee三层结构中dao层框架
- 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,而hibernate对jdbc进行封装,使用hibernate好处:不需要写复杂的jdbc代码,不需要写sql语句实现。
- hibernate开源轻量级的框架
- hibernate版本
hibernate3.x
hibernate4.x
hibernate5.x
3. ORM思想
- hibernate使用rom思想对数据库进行crud操作
- 在web阶段学习Javabean,更正确的叫法:实体类
- orm:object relational mapping对象关系映射
文字描述
1. 让实体类和数据库进行一一对应关系
让实体类首先和数据库表对应
让实体类属性和表里面字段对应
2. 不需要直接操作数据库表,而操作表对应实体类对象
画图分析:
4. Hibernate体系结构
三、hibernate入门案例
1. 搭建hibernate环境
1.1 导入hibernate的jar包
因为在使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志jar包。
不要忘记还有mysql驱动的jar包
2. 创建实体类
- 使用hibernate时候,不需要自己手动创建表,hibernate帮我们把表创建出来
3. 配置实体类和数据库表一一对应关系(映射关系)
使用配置文件实现映射的关系
3.1 创建xml格式的配置文件
- 映射配置文件名称和位置没有固定要求
- 建议:在实体类所在包里面创建,实体类名称.hbm.xml
3.2 如果配置文件是xml格式,在配置文件中首先引入xml约束
- 学过约束dtd、schema,在hibernate里面引入的约束dtd约束
3.3 配置映射关系
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 1. 配置类和表对应
class标签
name属性:实体类全路径
table属性:数据库表名称
-->
<class name="entity.User" table="t_user">
<!-- 2. 配置实体类id和表里面id对应
hibernate要求实体类有一个属性作唯一值
hibernate要求表有字段作为唯一值
-->
<!-- id标签
name属性:实体类里面id属性名称
column属性:生成的表字段名称
-->
<id name="uid" column="uid">
<!-- 设置数据库表id增长策略
native:生成表id值就是主键自动增长
-->
<generator class="native"></generator>
</id>
<!-- 3. 配置其他属性和表字段对应
name属性:实体类属性名称
column属性:生成表字段名称
-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
4. 创建hibernate的核心配置文件
4.1 核心配置文件格式是xml,但是核心配置文件名称和位置固定的
- 位置,必须在src下面
- 名称必须叫hibernate.cfg.xml
4.2 引入dtd约束
4.3 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>
<!-- 1. 配置数据库信息 必须要有-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</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>
<!-- 配置数据库方言
在mysql里面实现分页,关键字limit,只能使用mysql里面
在Oracle数据库,实现分页rownum
让hibernate框架识别不同数据库的特有的语句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 3.把映射文件放到核心配置文件中 必须的-->
<mapping resource="entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
5. 进行测试
实现添加操作:只有第5步不固定
- 第一步:加载hibernate核心配置文件
- 第二步:创建一个对象SessionFactory对象
- 第三步:使用SessionFactory创建session对象
- 第四步:开启事务
- 第五步:写具体逻辑crud操作
- 第六步:提交事务
- 第七步:关闭资源
看到的效果
- 是否生成表
- 看表是否有记录
package hibernatetest;四、hibernate配置文件详解
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import entity.User;
public class HibernateDemo {
@Test
public void testAdd() {
// 第一步:加载hibernate核心配置文件
//到src下面找到名称是hibernate.cfg.xml,放到以下对象中去
//在hibernate里面封装对象
Configuration cfg = new Configuration();
cfg.configure();
// 第二步:创建一个对象SessionFactory对象
//读取hibernate核心配置文件内容,创建sessionFactory
//在过程中,根据映射关系,在配置数据库里面把表创建
SessionFactory sessionFactory = cfg.buildSessionFactory();
// 第三步:使用SessionFactory创建session对象
//类似于连接数据库
Session session = sessionFactory.openSession();
// 第四步:开启事务
Transaction tx = session.beginTransaction();
// 第五步:写具体逻辑crud操作
//添加功能
User user = new User();
user.setUsername("小强");
user.setPassword("123");
user.setAddress("中国");
//调用session里面的方法实现添加
session.save(user);
// 第六步:提交事务
tx.commit();
// 第七步:关闭资源
session.close();
sessionFactory.close();
}
}
1. hibernate映射配置文件
映射配置文件名称和位置没有固定要求
映射配置文件中,标签name属性值写实体类相关内容
1. class标签name属性值是实体类全路径
2. id标签和property标签 里面name属性值写实体类名称id标签和property标签,column属性可以省略的
1.不写默认值,和name属性值是一样的
property标签type属性,设置生成表字段的类型,自动对应类型
2. hibernate核心配置文件
- 配置写的位置
配置三部分要求
1. 数据库部分必须的
2. hibernate部分可选的
3. 映射文件必须的核心配置文件名称和位置固定的
位置:src下面
名称:hibernate.cfg.xml
1. Configuration
2. SessionFactory:Session工厂
3. Session
4. Transaction
六、hibernate配置错误问题处理hibernate版本:hibernate-release-5.0.7.Final
mysql版本 :mysql-connector-java-8.0.20
jdk版本:1.8(最好使用这个版本,使用高版本极易出错)
如果使用的是mysql5.0版本的
如果使用的是mysql8.0版本:参考
<session-factory>
<!-- 数据库名称:hibernate_first -->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_test?useSSL=false&serverTimezone=UTC</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 设置方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<mapping resource="domain/LinkMan.hbm.xml"/>
<mapping resource="domain/Customer.hbm.xml"/>
</session-factory>
注意:数据库要导入对应的jar包