[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();//关闭事务