目录
- 第一节 Hibernate简介
- 第二节 hibernate的简单使用
- 第三节 API详解
第一节 Hibernate简介
1.1 项目中框架的体系结构
1.2 ORM框架
- 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
- 对象和表字段进行对应
- 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
- Object:对象,java对象,此处特指JavaBean,Model
- Relational:关系,二维表,数据库中的表。
- Mapping:映射
1.3 什么是hibernate
- Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。
- DBUtils也是对JDBC的封装
- 它将POJO与数据库表建立映射关系,是一个全自动的orm框架
- POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans
- hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
- Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
1.4 Hibernate总结
- Hibernate是一个数据持久化层(dao)的ORM框架,它的主要功能就是把对象映射到表中,操作API,只需要将一个对象存储到数据库,不需要写sql语句。
- Hibernate提供了对关系型数据库增删改查操作。
1.5 主流的ORM框架
- JPA(Java Persistence API-java持久层API)JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系。(只有接口规范)
- Hibernate 最流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL。
- MyBatis 本是apache的一个开源项目 iBatis,支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。
- Apache DBUtils 、Spring JDBCTemplate
1.6 Hibernate的优点
- Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
- Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作 session.save(User);
- Hibernate使用java的反射机制。
- Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,有一对一到多对多的各种复杂关系映射。
hibernate如果有非常多的对象转换成sql就不如MyBatis自己写sql来的快了,因为它有一个转换的过程。
第二节 hibernate的简单使用
2.1 下载hibernate的jar包
- 下载hibernate的jar包
- 官方网址:http://hibernate.org/orm/.
- 最新的5.4,一般不用最新的,使用hibernate一般是老项目不会使用最新的版本
- 这里使用的是3.6.10版本的
- 百度云链接无故被封。。。无法提供。。。
2.2 数据库建表
Navicat Premium 11 64位本来也放在上面百度云盘中
- 打开Navicat Premium新建查询
create database hibernate_day1;
use hibernate_day1;
create table t_user(
id int auto_increment primary key,
username varchar(50),
password varchar(30)
);
2.3 在IDEA中新建一个javaweb项目
- 创建项目,这里可以暂时不使用Tomcat,web.xml可要可不要
2.4 导入jar包
-
这里我们使用3.6.10的版本开发,4.0开发是建议使用注解
-
所需要导入的jar包,如下图,然后再导入一个mysql数据库连接驱动
-
IDEA中导完jar包不要忘了右键Add as Library 导入
-
可以设置jar包适用的范围是整个项目还是这个模块,这里选择模块即可
-
jar包的作用
2.4 hibernate的核心配置文件
- hibernate.cfg.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-configuration>
<session-factory>
<!-- 1、配置数据库连接的4个参数 -->
<!-- mysql8以上的jar包要加上cj,com.msyql.cj.jdbc.Driver -->
<!-- 这里用的是5,8以下,所以无需添加 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- ///代表是本地的默认localhost:3306可以省略,如果是在服务器要写://ip:端口号/ -->
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day1</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 是否显示sql语句 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 是否自动提交事务:针对insert有效,针对delete无效 -->
<property name="hibernate.connection.autocommit">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 2、配置JavaBean与表的映射文件 -->
<mapping resource="com/it/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
2.6 编写JavaBean和映射文件.hbm.xml
- JavaBean与.hbm.xml文件所属的包和文件名要一致
- User.java提供getter、setter、无参构造、username、password有参构造
- User.hbm.xml配置内容
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name:模型的全名称 table:要和数据库的表名一致-->
<class name="com.it.hibernate.domain.User" table="t_user">
<!-- name:模型属性名就是User.java里的uid column:uid对应数据库中的id -->
<id name="uid" column="id">
<!-- generator:id的生成策略
native:如果是mysql数据库,id会自动增长
-->
<generator class="native"></generator>
</id>
<!-- 如果模型的属性和数据库的列名一样,就不用写column -->
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>
2.7 测试
- 创建com.it.hibernate.test包,在下面写一个Demo1.java
package com.it.hibernate.test;
import com.it.hibernate.domain.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class Demo1 {
@Test
public void test1(){
//1.获取核心配置文件对象,默认是加载src的hibernate.cfg.xm文件
//new Configuration()加载的是hibernate.properties,.configure()才是加载src的hibernate.cfg.xm
Configuration cfg = new Configuration().configure();
//2.创建会话工厂
SessionFactory factory = cfg.buildSessionFactory();
//3.创建会话
Session sessoin = factory.openSession();
//4.开启事务
Transaction trans = sessoin.getTransaction();
trans.begin();
//5.保存
User user = new User();
user.setUsername