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
> 事务对象
> 事务概念
-- 事务四个特性
原子性、一致性、隔离性、持久性
hibernate Day1的更多相关文章
- hibernate   Day1   案例代码
		1.创建Person类 package com.icss.pojo; public class Person { private int uid; private String uname; priv ... 
- Hibernate 配置详解(2)
		6) hibernate.session_factory_name: 配置一个JNDI名称,通过Configuration对象创建的SessionFactory会绑定到JNDI下该名称中.一般名字格式 ... 
- Exception 01 : org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [foo]
		异常名称 org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [foo] 异常截屏 异常详细信息 org.hibernat ... 
- Hibernate上传数据到数据库,从数据库读取数据到本地模板代码
		1.Hibernate上传数据到数据库: //创建一个session对象 Session session1=HibernateTools.getSession(); //Fenciresult数据库表 ... 
- 12 Spring Data JPA:orm思想和hibernate以及jpa的概述和jpa的基本操作
		spring data jpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查询 d ... 
- hibernate多对多关联映射
		关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ... 
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
		问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ... 
- hibernate多对一双向关联
		关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ... 
- Hibernate中事务的隔离级别设置
		Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下 
随机推荐
- Android GUI系统学习1:Gralloc
			Gralloc模块是从Android Eclair(android 2.1)開始增加的一个HAL模块,Gralloc的含义为是Graphics Alloc(图形分配).他对上为libui提供服务,为其 ... 
- sanic官方文档解析之streaming(流动,滚动)和class_based_views(CBV的写法)
			1,streaming(流媒体) 1.1请求流媒体 Sanic允许你通过流媒体携带请求数据,如下,当请求结束await request.stream.read()就会返回None,仅仅只有post请求 ... 
- gradle in action 笔记
			原网址 https://lippiouyang.gitbooks.io/gradle-in-action-cn/content/ 
- These interactions can be expressed as complicated, large scale graphs. Mining data requires a distributed data processing engine
			https://databricks.com/blog/2014/08/14/mining-graph-data-with-spark-at-alibaba-taobao.html 
- 编写自定义PE结构的程序(如何手写一个PE,高级编译器都是编译好的PE头部,例如MASM,TASM等,NASM,FASM是低级编译器.可以自定义结构)
			正在学PE结构...感谢个位大哥的文章和资料...这里先说声谢谢 一般高级编译器都是编译好的PE头部,例如MASM,TASM等一直都说NASM,FASM是低级编译器.可以自定义结构但是苦于无人发布相关 ... 
- Deep Learning 36:python中的一些函数
			1.map(function, sequence[, sequence, ...])函数:返回一个list作用:map的作用是以参数序列中的每一个元素调用function函数,返回包含每次functi ... 
- JVM Safepoint 安全点
			一.什么是安全点: 在可达性分析算法中查找存活的对象,首先要找到哪些是GC Roots: 有两种查找GC Roots的方法: 一种是遍历方法区和栈区来查找(保守式GC): 一种是通过OopMap的数据 ... 
- 关于android的DB操作
			package com.metoo.girls; import android.content.ContentValues; import android.content.Context; impor ... 
- I.MX6 sdio 设备注册及识别
			/************************************************************************* * I.MX6 sdio 设备注册及识别 * 说明 ... 
- NOIP2008 传纸条(DP及滚动数组优化)
			传送门 这道题有好多好多种做法呀……先说一下最暴力的,O(n^4的做法) 我们相当于要找两条从左上到右下的路,使路上的数字和最大.所以其实路径从哪里开始走并不重要,我们就直接假设全部是从左上出发的好啦 ... 
