[Hibernate] Hibernate 原理及入门操作

一、Hibernate概述

1.什么是Hibernate

Hibernate 框架是Java持久层框架之一。 它具有简单易学,灵活性强, 可扩展性强等特性。能够简化代码量。它是一个ORM(Object Relational Mapping,对象关系映射)框架,对JDBC 进行了轻量级的对象封装,使 Java 开发人员可以使用面向对象的编程思维来操作数据库。

2.原理

Hibernate 在 Java 三层架构中充当持久层,根据 POJO 类和对应的映射文件动态生成对应的SQL语句,不需要开发人员自己手动编写。JDBC时需要开发人员自己编写,需要修改POJO时工作量大,但是Hibernate 只需要修改实体类配置即可 。

二、入门

1.需要导入的jar包

mysql驱动包 和request 目录下的jar包

2.创建数据库

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_linkman;
	private String cust_phone;
	private String cust_mobile;
	
	public Long getCust_id() {
		return cust_id;
	}
	public void setCust_id(Long cust_id) {
		this.cust_id = cust_id;
	}
	public String getCust_name() {
		return cust_name;
	}
	public void setCust_name(String cust_name) {
		this.cust_name = cust_name;
	}
	public String getCust_source() {
		return cust_source;
	}
	public void setCust_source(String cust_source) {
		this.cust_source = cust_source;
	}
	public String getCust_industry() {
		return cust_industry;
	}
	public void setCust_industry(String cust_industry) {
		this.cust_industry = cust_industry;
	}
	public String getCust_level() {
		return cust_level;
	}
	public void setCust_level(String cust_level) {
		this.cust_level = cust_level;
	}
	public String getCust_linkman() {
		return cust_linkman;
	}
	public void setCust_linkman(String cust_linkman) {
		this.cust_linkman = cust_linkman;
	}
	public String getCust_phone() {
		return cust_phone;
	}
	public void setCust_phone(String cust_phone) {
		this.cust_phone = cust_phone;
	}
	public String getCust_mobile() {
		return cust_mobile;
	}
	public void setCust_mobile(String cust_mobile) {
		this.cust_mobile = cust_mobile;
	}
	@Override
	public String toString() {
		return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]";
	}
	
}

4.创建映射文件

创建命名为Customer.hbm.xml的映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 配置表与实体对象的关系 -->
        <!-- 配置后需要写完整类名的可以只写类名 -->
<hibernate-mapping package="com.test.domain">
	<!-- 
		class 配置实体与表的对应关系
		name:完整 类名
		table:表名
	 -->
	<class name="Customer" table="cst_customer">
		<!-- 
			id 配置主键映射的属性
			name:主键对应的属性名
			column:表中的主键列名
		 -->
		<id name="cust_id" column="cust_id">
			<!--generator: 主键生成策略 -->
			<generator class="native"></generator>
		</id>
		<!-- 
			property:普通属性(除id以外的)映射
			name:主键对应的属性名
			column(可选):表中的主键列名 默认值使用属性名
			type(可选): 列的属性
				3中属性:java、hibernate、数据库类型
			not-null :属性是否为空
			length: 配置数据库中列的长度
		 -->
		<property name="cust_name" column="cust_name"></property>
		<property name="cust_source" column="cust_source"></property>
		<property name="cust_industry" column="cust_industry"></property>
		<property name="cust_level" column="cust_level"></property>
		<property name="cust_linkman" column="cust_linkman"></property>
		<property name="cust_phone" column="cust_phone"></property>
		<property name="cust_mobile" column="cust_mobile"></property>
	</class>
</hibernate-mapping>

5.创建核心配置文件

在 src 目录下创建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:///hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<!--数据库方言-->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		 <!-- 打印到控制台 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化语句 -->
		<property name="hibernate.format_sql">true</property>
		
		<!--  auto schema export  自动导出表结构. 自动建表-->
		 <property name="hibernate.hbm2ddl.auto">update</property>
		 
		 <!-- 引入orm元数据  -->
		<mapping resource="com/test/domain/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

6.测试

成功:控制台中会打印出对应的sql语句, 同时数据库中插入相应的数据。

三.Hibernate常见配置

1.映射文件的配置

 该文件是向Hibernate提供持久化类到数据库的映射

<class>:用来建立类和表的映射。name:类名。table:表名

<id>: 用来配置类中的属性和数据库中主键字段的映射。name:类的属性名。column:字段名。length:字段长度。type:Java数据类型、Hibernate 数据类型、SQL 类型。

       <generator>:主键生成策略

<property>:用来类中普通属性和表中字段的映射。 name:类的属性名。column:字段名。length:字段长度。type:Java数据类型、Hibernate 数据类型、SQL 类型。

2.核心配置

配置持久层和映射文件所需要的基本信息。默认名称为Hibernate.cfg.xml

必须配置连接数据库的基本参数(4个)

可选配置 Hibernate 方言

是否打印和格式化 sql 文件

如何创建表

加载映射文件

四.Hibernate的组件

应用程序调用Configuration读取主配置文件和映射文件生成SessionFactory对象,然后该对象生成session。然后Session对象生成Transaction对象。session通过save、delete、saveOrUpdate、get方法实现对数据库的增删改查。Transaction对象提交事务或者回滚事务。

总结Hibernate工作原理:

1.通过Configuration().config();//读取并解析配置文件

2.通过Hbernate.cfg.xml 加载映射文件读取映射信息

3.通过config.buildSessionFactory();//创建SessionFactory对象

4.通过SessionFactory.openSession();//得到session对象

5.通过session.getTransaction().commit();//提交事务
6.session.close();//关闭事务

猜你喜欢

转载自blog.csdn.net/xueerliang123/article/details/82532312
今日推荐