【Hibernate笔记整理一】HelloWorld

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106149355







本篇博客还是以一个众所周知的 HelloWorld 小例子开始讲起,帮助大家快速了解 Hibernate 这个主流框架。

Hibernate 版本选用的是 5.0.7,数据库选用的是 MySQL。


一、Hibernate 概述

在讲 HelloWorld 这个小案例之前,我先简单说一下什么是 Hibernate

1、什么是 Hibernate

如果说的专业点,Hibernate 是一款主流的全自动化的 ORM(Object Relationship mapping,对象关系映射 )框架,它是一款开源项目,对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据表建立起映射关系,自动生成 SQL 语句,自动执行。

有些小伙伴可能不太理解什么是全自动化,其实它对应的还有半自动化,我在 MyBatis 博客 中已经介绍过相关概念,在此再重复介绍一下这两个概念:

1)全自动化

全自动化 就是开发者只需要调用相关接口即可完成操作,整个流程全部封装,开发者无需关注。Hibernate 就是一款全自动化的 ORM 框架,它实现了 POJO 到数据库的映射,同时还可以自动生成 SQL 语句来完成操作。


2)半自动化

半自动框架 它只完成了一部分功能,剩下的工作仍需开发者手动完成。像 MyBatis 就是一款半自动化 ORM 框架,它没有实现 POJO 与数据库的映射,只实现了 POJO 与 SQL 语句之间的映射,同时需要开发者自定义 SQL 语句,以及数据与 POJO 的装配关系。

全自动化框架写法虽然简单,但是遇到需求变化比较多的项目就显的不是那么灵活了;而半自动化框架虽然灵活,但是它要求开发者对 SQL 语句运用要很熟练。总得来说,它们各有利弊吧,这两款框架依然是目前比较主流的框架。


2、Hibernate 开发环境

Hibernate 的历史长河中,其中 3.X 的版本使用人数较多,但在 4.X 的时候对 3.X 版本进行了很大的升级,用法也有了很大的改变,导致使用的用户逐渐减少,为了改变这一现象,Hibernate 又推出了 5.X 版本,它对 3.X 版本进行了优化升级,用法与 3.X 类似,后来又得到了很多用户的支持。

我们可以从官网上下载 Hibernate,下载地址:https://sourceforge.net/projects/hibernate/files/hibernate-orm
 
我们解压 Hibernate,它的目录结构如下:

  • documentation: Hibernate 开发的文档;
  • lib: Hibernate 开发包;
    • required: Hibernate 开发的必须的依赖包;
    • optional: Hibernate 开发的可选的 jar包;
  • project: Hibernate 提供的测试项目。

01Hibernate解压目录



二、HelloWorld

1、准备工作

先创建一个最基本的 Java 工程,或者创建一个简单的 Maven 工程,这里推荐大家使用 Maven 工程(可以参考:在 Eclipse 中使用 Maven),如果不想使用 Maven 也可以直接将 Jar 包下载下来直接使用。

1)Maven 依赖

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.11</version>
		<scope>test</scope>
	</dependency>
    
	<!-- mysql依赖,它是向下兼容 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.16</version>
	</dependency>

	<!-- hibernate依赖 -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>5.0.7.Final</version>
	</dependency>
	
	<!-- log4j依赖 -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.16</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>1.6.1</version>
	</dependency>
</dependencies>

2)Jar 包

  • 数据库驱动包(mysql-connector-java);
  • Hibernate 开发的必须 jar包(required);
  • Hibernate 引入日志记录包(log4j、slf4j-api、slf4j-log4j)。

01Jar包


3)数据表

CREATE TABLE `cst_customer` (
	`cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
	`cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
	`cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
	`cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
	`cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
	`cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
	`cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
	PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2、目录结构

1)Maven 目录结构

01Maven目录结构


2)普通 Java 工程目录结构

01普通Java工程目录结构


3、创建实体类

public class Customer {
	private Long cust_id;
	private String cust_name;
	private String cust_source;
	private String cust_industry;
	private String cust_level;
	private String cust_phone;
	private String cust_mobile;
    // set...() & get...()
}

4、创建映射文件

映射需要通过 XML 的配置文件来完成,这个配置文件可以任意命名。尽量统一命名规范(类名.hbm.xml

<?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>
	<!-- 建立类与表的映射 -->
	<class name="com.sunkuan.demo1.Customer" table="cst_customer">
		<!-- 建立类中的属性与表中的主键对应 -->
		<id name="cust_id" column="cust_id">
			<!-- 主键都有生成策略
				native: 本地策略
			 -->
			 <generator class="native" />
		</id>
		
		<!-- 建立类中的普通属性和表中的字段的对应 -->
		<property name="cust_name" column="cust_name" />
		<property name="cust_source" column="cust_source" />
		<property name="cust_industry" column="cust_industry" />
		<property name="cust_level" column="cust_level" />
		<property name="cust_phone" column="cust_phone" />
		<property name="cust_mobile" column="cust_mobile" />
	</class>
</hibernate-mapping>

5、创建 Hibernate 核心配置文件

project/etc 中可以找到相关配置说明 。Hibernate 的核心配置文件的名称:hibernate.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://localhost:3306/hibernate_day</property><!-- 连接本地数据库也可以这样写:jdbc:mysql:///sys -->
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<!-- 配置Hibernate的方言,Hibernate是不需要写SQL语句的,但是得指定它的方言(数据库的类型) -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 可选配置 -->
		<!-- 打印SQL -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL -->
		<property name="hibernate.format_sql">true</property>
         <!-- 自动建表 -->
         <!-- <property name="hibernate.hbm2ddl.auto">update</property> -->
		
		<!-- 引入映射文件 -->
		<mapping resource="com/sunkuan/demo1/Customer.hbm.xml" />
	</session-factory>
</hibernate-configuration>

6、测试代码

@Test
// 保存客户的案例
public void demo1() {
	// 1. 加载Hibernate的核心配置文件
	Configuration conf = new Configuration().configure();
	// 2. 创建一个SessionFactory对象:类似于JDBC中的连接池
	SessionFactory sessionFactory = conf.buildSessionFactory();
	// 3. 通过SessionFactory获取到Session对象:类似于JDBC中Connection
	Session session = sessionFactory.openSession();
	// 4. 手动开启事务:
	Transaction transaction = session.beginTransaction();
	// 5. 编写代码
	Customer customer = new Customer();
	customer.setCust_name("张三");
	
	session.save(customer);
	
	// 6. 事务提交
	transaction.commit();
	// 7. 资源释放
	session.close();
}


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/106149355