一、Hibernate概述
1、什么是Hibernate
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(); } }