hibernate Day1


1 Web内容回顾
(1) JavaEE三层架构
web层(struts2框架)
service层(spring框架)
dao层(hibernate框架):负责对数据库进行CRUD操作
(2) MVC模式(这是不Java独有的,是所有开发语言共有的)
Model--模块
View--视图
Controller--控制器
2 Hibernate概述
(1) 什么是框架
框架( Framework )是整个或部分系统的可重用设计,表现为一组抽象 构件 及构件实例间交互的方法 ;
另一种定义认为,框架是可被应用开发者定制的应用骨架。
前者是从应用方面而后者是从目的方面给出的定义。
通俗理解:写我们自己的程序,使用框架后,它会帮助我们实现一部分的功能,使用框架的好处,少写一部分代码实现
功能。
(2) 什么是Hibernate(重点)
> Hibernate:冬眠,我们可以理解为持久化
> Hibernate框架应用在JavaEE三层结构中的dao层
> 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是
jdbc,hibernate对jdbc进行了封装
> 使用hibernate的最大好处是不需要写复杂jdbc代码,不需要写sql语句
> hibernate是开源的轻量级的框架(不依赖于其他的框架,jar也很小)
> hibernate版本:
hibernate 3.x
hibernate 4.x:这是一个过渡版本,没有人使用
hibernate 5.x:我们要使用的版本
(3) 什么是ORM
> Hibernate使用orm思想对数据库进行crud操作
> 学习过JavaBean,更加正确的叫法 实体类
> ORM( Object Relational Mapping ): 对象关系映射 , 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数
据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的 --“ 虚拟对象数据库 ” 。
ORM 说明:
> 让实体类和数据库表进行一一对应关系
让实体类首先和数据库的表对应
让实体类中的属性与表中的字段相对应
> 不需要直接操作数据库表,而操作表对应的实体类对象
3 Hibernate入门
(1) 开发环境搭建
创建项目,MyEclispse中引入Hibernate框架
注意,hibernate框架上并不包含jdbc连接jar包,这个要自己导入
第二步 创建实体类 Person .java
package com.huza.domain;
public class Person {
/*hibernate要求实体类有一个唯一标识对象的属性,这个类中使用uid*/
private int uid;
private String uname;
private String pword;
private String addr;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPword() {
return pword;
}
public void setPword(String pword) {
this.pword = pword;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
创建实体类后,我们要创建该实体类对应的表,所以我们先创建一个数据库,再创建表,
其实我们在使用hibernate时,不需要自己手动创建表,hibernate可以帮助我们到数据库中去创建表的
第三步 配置实体类和数据库表的一一对应关系(映射关系)
>> 创建一个xml格式的配置文件
-- 映射配置文件名称和位置淌有固定要求
--建议:在实体类所在包里面创建,实体类名称.hbm.xml
>>在xml文件中引用相应的dtd约束
映射配置文件
第四步 创建hibernate的核心配置文件
>> 核心配置文件格式是xml,但是核心配置文件的名称和位置是固定的
-- 位置 : 必须在src目录下
-- 名称:必须是hibernate.cfg.xml
>> 创建 hibernate.cfg.xml 核心配置文件,并引入dtd约束
>> hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
--配置数据库信息(hibernate.properties文件中定义了配置的标准)
连接mysql数据库的配置详情
--配置hibernate信息
-- 把映射文件放到核心配置文件中
文件全部内容:hibernetate.cfg.xml
<?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.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate_day01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 配置数据库方言,就是针对不同的数据库有不同sql标准 -->
<property name="hibernate.dialect">hibernate.dialect</property>
<!-- 配置hibernate信息 可选 -->
<!-- 输出底层sql语句 -->
<property name="show_sql">true</property>
<!-- 输出底层sql语句 并格式化显示,方便开发人员查看 -->
<property name="format_sql">true</property>
<!-- hibernate帮助我们创建表,他不会自动创建,而是我们进行配置
create:如果没有该表则创建该表,注意每次都会重新创建(删除后再重新创建),因为每启动都会重新加载该文件
update:如果没有该表则创建该表,如果已经存在该表,则会看瞧一瞧表结构有没有变化,如果有变化则会创建新的表,如果没有保
留原来的表,且会保留其中的记录
create-drop:在显 式关闭sessionFactory时,则会删除对应的表,慎用。注意是显式关闭的是SessionFactory,不是Session噢
validate:每次加载时,都验证表与对象是否一致
使用注意:这几个配置只做一次,配置好后,生成数据库后,就取消这个配置
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 把映射文件加载过来 -->
<mapping resource="com/huza/domain/person.hbm.xml" />
</session-factory>
</hibernate-configuration>
(2) 添加功能实现(创建一个测试类)
第一步 加载hibernate核心配置文件
第二步 创建SessionFactory对象
第三步 使用SessionFactory创建session对象
第四步 开启事务
第五步 写具体逻辑crud操作
第六步 提交事务
第七步 关闭资源
效果:
> 是否在数据库中生成表
> 看表中是否有记录
package com.huza.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.huza.domain.Person;
public class HibernateDemoTest {
@Test
public void addPerson () {
// 第一步 加载hibernate核心配置文件
// 获取hibernate配置对象
Configuration cfg = new Configuration();
// 通过配置对象加载hibernate默认配置
cfg.configure();
// 第二步 创建SessionFactory对象
// 读取核心配置文件hibernate.cfg.xml,创建sessionFactory
// 在这个过程中,会根据映射关系,在数据库中把相应的表生成
SessionFactory sessionFactory = cfg.buildSessionFactory();
// 第三步 使用SessionFactory创建session对象
// 类似于jdbc连接,只是这个地方hibernate做了封装
Session session=sessionFactory.openSession();
// 第四步 开启事务
Transaction tx=session.beginTransaction();
// 第五步 写具体逻辑crud操作
Person person=new Person();
person.setUname("王小小");
person.setPword("wangxiaoxiao");
person.setAddr("中国上海");
// 调用session对象的实现方法,完成添加
session.save(person);
// 第六步 提交事务
tx.commit();
// 第七步 关闭资源
session.close();
sessionFactory.close();
}
}
4 Hibernate配置文件详解
(1) 映射配置文件
>映射配置文件名称和位置没法有固定要求
>映射配置文件中的name属性值写实体类相关内容
-- class 标签name属性值实体类全路径
-- id标签和property标签name属性值 实体类的属性名称(注意要完全一样)
-- id标签和property标签中的column属性是可以省略的,如果不写则,生成的字段名与属性名一样,建议写
出,这样比较清析。
-- property标签中 还有一个属性type属性,用于设定字段的类型,我们可以不用使用,这时hibernate会自动
生成相应的类型
(2) 核心配置文件
> 配置写位置要求
> 配置的三部分要求
-- 数据库配置部分是必须的
-- hibernate部分可选的
-- 映射文件必须的
> 核心配置文件名称和位置是固定的
-- 位置src
-- 名称hibernate.cfg.xml
5 Hibernate的核心API
(1) Configuration
org.hibernate.cfg.Configuration;// 所在包
Configuration cfg = new Configuration();
cfg.configure();
作用:到src目录下找到名称为hibernate.cfg.xml 配置文件,创建对象,把配置文件放到对象里(加载核心配置
文件)
当然我们如果不把配置文件放到指定src目录下,我们可以通过cfg的configure(path);重载来完成也可以加
载(基本不用)。
(2) SessionFactory (重点对象)
> 使用Configuration对象创建SessionFactory对象
-- 创建SessionFactory对象过程中做的事情
根据核心配置文件中的数据库配置信息,同时还有类与表的映射,到数据库里创建相应的表,但要根据
<property name="hibernate.hbm2ddl.auto">update</property>
> 因为我们在创建SessionFactory过程中,这个过程特别耗资源(因为要创建表)
-- 在hibernate操作中,建议一个项目一般创建一个SessionFactory对象(单例模式)
HibernateUtils.java
package com.huza.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* HibernateUtils工具类
* @author Huza
*
*/
public class HibernateUtils {
private static SessionFactory sessionFactory = null;
private HibernateUtils() {
}
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
return sessionFactory;
}
}
(3) Session(重点对象)
> session可以理解为jdbc中的连接connection
> 调用session里面不同的方法实现crud操作
-- 添加 save 方法
-- 修改 update 方法
-- 删除 delete 方法
-- 根据id查询 get 方法
> 一个项目中我们一般只有一个SessionFactory,是单例的,Session对象是单线程对象
-- Session对象不能共用,只能自己使用
(4) Transaction
> 事务对象
> 事务概念
-- 事务四个特性
原子性、一致性、隔离性、持久性

原文地址:https://www.cnblogs.com/1020182600HENG/p/7417987.html