一、Hibernate概述
1、什么是Hibernate
ORM(对象关系关系映射)框架
ORM:Object Relational Mapping(对象关系映射)。将Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。
2、Hibernate具有以下几点优势:
①、Hibernate对JDBC访问数据库的代码做了轻量级封装,简化了数据访问村层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率。
②、Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,很大程度简化了DAO(Data Access Object,数据访问对象)层编码工作。
③、Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系
④、可扩展性强,由于源码的开源及API的开发,当本身功能不够用时,可用自行编码进行扩展。
二、Hibernate使用
1、下载Hibernate的开发环境
Hibernate5.x(推荐使用) https://sourceforge.net/projects/hibernate/files/hibernate-orm/
2、解压Hibernate
documentation:Hibernate开发的文档
lib:Hibernate开发包
required:Hibernate开发的必须的依赖包
optional:Hibernate开发的可选的jar包
project:Hibernate提供的项目
3、创建一个使用Hibernate的项目
3.1、引入jar包
①、数据库驱动包
②、Hibernate开发的必须的jar包(required)
③、Hibernate日志记录包
3.2、创建表
CREATE TABLE cst_customer (
cust_id bigint NOT NULL IDENTITY(1,1) ,
cust_name varchar(32) NOT NULL,
cust_source varchar(32) DEFAULT NULL,
cust_industry varchar(32) DEFAULT NULL,
cust_level varchar(32) DEFAULT NULL,
cust_phone varchar(64) DEFAULT NULL,
cust_mobile varchar(16) DEFAULT NULL
) ON [PRIMARY]
3.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;
}
3.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-core-5.x.Final.jar包中
org.hibernate => hibernate-mapping-3.0.dtd(或hibernate-mapping-5.0.dtd)
-->
<hibernate-mapping>
<!-- 建立类与表的映射 -->
<class name="com.marw.util.Customer" table="cst_customer" catalog = "HibernateDB" schema = "dbo">
<!-- 建立类中的属性与表中的主键对应 -->
<id name="cust_id" column="cust_id">
<generator class="native"></generator>
</id>
<!-- 建立类中的普通属性与表中的字段对应 -->
<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_phone" column="cust_phone"></property>
<property name="cust_mobile" column="cust_mobile"></property>
</class>
</hibernate-mapping>
注意:com.microsoft.sqlserver.jdbc.SQLServerException:对象名xxx无效原因:指定catalog = "数据库名" schema =“模式”(正常情况下不用指定catalog、schema)不正
3.5、创建数据库配置文件
<?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-core-5.x.Final.jar包中
org.hibernate => hibernate-configuration-3.0.dtd
-->
<hibernate-configuration>
<session-factory>
<!-- 连接数据库基本参数 -->
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=HibernateDB;</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">AAA@111</property>
<!-- 配置Hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 可选配置start -->
<!-- 控制台打印sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 控制台打印sql语句 格式化-->
<property name="hibernate.format_sql">true</property>
<!-- 可选配置end -->
<!-- 配置映射 -->
<mapping resource="com/marw/util/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
注意:com.microsoft.sqlserver.jdbc.SQLServerException:对象名xxx无效的原因:hibernate.connection.url中的数据库名databaseName=不正
3.6、编写测试代码
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.jupiter.api.Test;
/**
* @Title: HibernateTest
* @Description:
* @author: marw
* @date 2020/11/03 14:03:48
*/
public class HibernateTest {
@Test
public void demo1() {
// 1.加载Hibernate的配置文件Hibernate.cfg.xml
Configuration configuration=new Configuration().configure();
// 2.获取SessionFactory对象 类似JDBC连接池
SessionFactory factory=configuration.buildSessionFactory();
// 3.获取Session对象 类似JDBC中Connection
Session session=factory.openSession();
// 4.开启事务(Hibernate版本5不用手动开启事务,要兼容版本3需要手动开启事务)
Transaction transaction=session.beginTransaction();
// 5.编写代码
Customer customer=new Customer();
customer.setCust_name("zhang");
session.save(customer);
// 6.提交事务
transaction.commit();
// 7.资源释放
session.close();
}
}