Hibernate学习笔记一

一、Hibernate的概述

1.1 Hibernate框架的介绍

  • 什么是框架?

    所谓框架,就是封装好了一些功能,我们需要使用这些功能时,调用即可,不需要再手动的实现

  • Hibernate框架是什么?

    Hibernate是一个开放源代码的ORM(Object Relation Mapping,对象关系映射)框架,它对JDBC进行了轻量级的对象封装。使得Java开发人员可以使用面向对象的编程思想来操作数据库。

    类似于C#中的Entity FrameWork

    简单理解,就是帮我们操作数据库的框架

    操作数据库:JDBC---->DBUtils---->Hibernate

  • 使用Hibernate的好处?

    操作数据库的时候,可以面向对象的方式来完成,不需要书写SQL语句

  • Hibernate框架是一个ORM框架

    所谓的ORM就是利用描述对象数据库表之间映射的元数据,自动把java应用程序中的对象,持久化到关系型数据库的表中。通过操作java对象,就可以完成对数据库表的操作。可以把ORM理解为关系型数据和对象的一个纽带,开发人员只需要关注纽带一端的映射对象即可。

1.2 Hibernate框架的搭建

Hibernate框架的搭建步骤:

  • 下载Hibernate5开发包,导入需要的jar包

  • 创建数据库,准备表,实体

  • 书写ORM元数据(对象与表的映射的配置文件)

    • 导入约束

      • 核心配置文件的xml建议放在src下,命名为hibernate.cfg.xml

      • 映射文件的xml建议放在src/domain下,命名为类名.hbm.xml

    • 实体

  • 书写配置文件

  • 书写代码测试

1.2.1 约束

  • 导入的约束类型有两种:

    • 一种是核心配置文件的约束文件

    • 一种是映射文件的约束文件

  • 约束类文件

    约束类文件类型的后缀是.dtd的,dtd 是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。dtd 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和dtd文件来看文档是否符合规范,元素和标签使用是否正确。

    一个dtd文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。XML文件提供应用程序一个数据交换的格式,dtd正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的dtd,各公司都能够依照dtd建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。

  • 导入约束的目的:

    说的直白点就是为了检验编码者的代码是否合乎编写的规则;

1.2.2 导入约束的步骤

  • 有网的情况下:

    第一步:复制相应的约束版本和下载网址

    操作顺序是:在项目中的:Referenced Libraries --> hibernate-core-5.0.7.Final.jar --> org.hibernate 文件下的如图所示的两个dtd文件(在此文件夹最下方)

    hibernate-configuration-3.0.dtd是核心配置文件的约束文件,hibernate-mapping-3.0.dtd是映射文件的约束文件

    第二步:将下面的两项复制粘贴到约束导入框内:(hibernate-configuration-3.0.dtd为例)

    操作顺序是:eclipse ---> window ----> preferences -----> xml ----> xml Catalog

    再添加网址

  • 在无网的情况下

    没有网的情况下也可以导入使用约束,导入的前提是你有相应的hibernate-mapping-3.0.dtd和hibernate-onfiguration-3.0.dtd这两个文件
    第一步:复制相应的约束文件下载网址(hibernate-mapping-3.0.dtd为例)

    第二步:将复制的内容,添加到xml文件内

    第三步:添加信息到约束导入框

    前面的顺序相同,只是在导入dtd文件的方式不一样,如果dtd在项目中存在,选择WorkSpace,如果文件存在磁盘上,选择File System

1.2.3 创建实体(持久化类)

持久化是指类的对象能够被持久化保存到数据库中。Hibernate使用普通的java对象(Plain Old Java Object),即POJO的编程模式进行持久化。POJO类中包含的是与数据库表相对应的各个属性,这些属性通过getter和setter方法访问,对外部隐藏内部的实现细节。

下面创建实体类Customer(对应数据库表cst_customer),Customer类包含与cst_customer数据表字段对应得属性,以及相应得get/set方法。

1.2.4 准备ORM元数据

映射文件内容配置:(已导入映射文件的约束)

Hibernate需要知道实体类Customer映射到数据库中的哪张表,以及类中的哪个属性对应数据库表中的哪个字段,这些是需要在映射文件中配置。

在实体类Customer所在的包中,创建一个名称为Customer.hbm.xml的映射文件,在该文件内定义Customer的属性是如何映射到cst_customer表的列上的。

标签属性说明:

  • 用来创建类和表的映射:<class></class>

    • name属性:类中的全路径,包名可以放在的Package属性内,可以减少路径的书写

    • table属性:表名(如果类名和表名是一致的,table属性可以省略)

    • catalog属性:数据库名称,可以省略

  • 用来创建类中的属性与表中的主键字段对应:<id></id>

    • name属性:类中的属性名

    • column属性:表中字段名(如果类中的属性名和表中的字段名一致,可以省略)

    • length属性:字段的长度

    • type属性:类型。写java数据类型,Hibernate数据类型(默认),SQL类型

  • 用来设置主键策略:<generator></generator>

  • 用来创建类中的普通属性与表中字段对应:<property></property>

    • name属性:类中的属性名

    • column属性:表中字段名(如果类中的属性名和表中的字段名一致,可以省略)

    • length属性:字段的长度

    • type属性:类型。写java数据类型,Hibernate数据类型(默认),SQL类型

核心文件内容配置:(已导入核心配置文件的约束)

​Hibernate的映射文件反映了持久化类和数据库表的映射信息,而Hibernate的配置文件则主要用来配置数据库连接以及Hibernate运行时所需要得各个属性得值。在src下创建下一个名为hibernate.cfg.xml(默认名称),发布后,会在项目的WEB-INF/classes路径下。

​Hibernate的配置文件也可以是properties属性文件格式的配置文件,它使用键值对的形式存放信息,默认文件名称:hibernate.properties。

核心配置文件内,<session-factory></session-factory>的作用是创建<session>对象的,<session>是hibernate中操作数据库的核心对象,<session-factory>必须包含三部分内容:

  • 第一部分:连接数据库的信息

  • 第二部分:hibernate的可选配置

  • 第三部分:映射文件的位置

连接数据库的信息可以在hibernate的开发包中找到,查找步骤:开发包----->project----->etc---->hibernate.properties中查找:

hibernate的可选配置也可以在hibernate.properties中找到,简单配置文件的作用:

  • 是否显示hibernate生成的SQL语句

    <property name="hibernate.show_sql">true</property>

  • 是否格式化输出SQL语句到控制台

    <property name="hibernate.format_sql">true</property>

  • 配置hibernate采用何种方式生成DDL语句

<property name="hibernate.hbm2ddl.auto">update</property>

  • none:不用Hibernate自动生成表

  • create:每次都会创建一个新的表

  • create-drop:每个都会创建一个新的表,程序执行结束后删除这个表

  • update:如果数据库中有表,使用原来的表,如果没有表,创建一个新表,可以更新表结构

  • validate:只会使用原来的表。对映射关系进行校验

  • 设置映射文件的位置,也可以在代码中设置

    <mapping resource=""/>

1.2.5 测试

步骤分析:

  1. 解析主配置文件

  2. 根据配置文件创建SessionFactory

  3. 根据SessionFactory创建Session

  4. 开启事务

  5. 执行操作

  6. 提交事务

  7. 释放资源

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import domain.Customer;

public class HibernateDemo1 {
	
	@Test
	public void test1() {
		//1. 解析主配置文件
		Configuration cfg = new Configuration();
		cfg.configure();
		
		//2.  根据配置文件创建SessionFactory
		SessionFactory factory = cfg.buildSessionFactory();
		
		//3.  根据SessionFactory创建Session
		Session session = factory.openSession();
		
		//4.  开启事务
		Transaction tx = session.beginTransaction();
		
		//5.  执行操作
		Customer cust = new Customer();
		cust.setCustName("chenia");
		session.save(cust);
		
		//6.  提交事务
		tx.commit();
		
		//7.  释放资源
		session.close();
		factory.close();
	}
}
原文地址:https://www.cnblogs.com/chenia/p/13261714.html