【SSH】SSH之Hibernate框架:初识Hibernate

什么是Hibernate:

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
ORM:Object Relational Mapping(对象关系映射)。指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。

为什么用Hibernate:

1、Hibernate对JDBC进行了非常轻量级的对象封装,大大简化了数据访问层繁琐的重复性代码,减少了内存消耗,加快了运行效率;
2、Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,支持从一对一到多对多的各种复杂关系;
3、源代码开源以及API的开放使其可扩展性好。

怎么用Hibernate:

Hibernate的下载地址及目录结构

下载地址:https://sourceforge.net/projects/hibernate/files/hibernate-orm/
目录结构:
在这里插入图片描述
documentation:Hibernate开发的帮助文档
lib:Hibernate开发的所需jar包
project:Hibernate开发的项目示例

Hibernate的简单入门:

1、创建Java或web项目,导入所需jar包:
数据库驱动包:
在这里插入图片描述
Hibernate开发的必需jar包:
在这里插入图片描述
日志记录包:
在这里插入图片描述
2、在数据库新建一个表:cst_customer
在这里插入图片描述
3、在“cn.jingpengchong.pojo”包下新建一个实体类:Customer

package cn.jingpengchong.pojo;

public class Customer {
	
	private long id;
	private String name;
	private String source;
	private String industry;
	private String level;
	private String phone;
	private String mobile;
	//为节省篇幅,此处没有粘贴get/set方法
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", source=" + source + ", industry=" + industry + ", level="
				+ level + ", phone=" + phone + ", mobile=" + mobile + "]";
	}
}

4、在“cn.jingpengchong.pojo”包下创建实体类Customer的映射文件:Customer.hbm.xml
映射文件的dtd可以在hibernate-core-5.4.10.Final.jar包的“/org/hibernate/hibernate-mapping-3.0.dtd”文件中找到。
映射文件的内容主要有:
①用class标签建立类与表的映射;
②用id标签建立类中的id与表中的主键的映射,定义主键生成策略
③用property标签建立类中的普通属性与表中的字段的映射。

<?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="cn.jingpengchong.pojo.Customer" table="cst_customer">
		<!-- 建立类中的id与表中的主键的映射 -->
		<id name="id" column="cust_id" length="32" type="long">
			<generator class="native"/>
		</id>
		<!-- 建立类中的普通属性与表中的字段的映射 -->
		<property name="name" column="cust_name" length="32" type="string"/>
		<property name="source" column="cust_source" length="32" type="string"/>
		<property name="industry" column="cust_industry" length="32" type="string"/>
		<property name="level" column="cust_level" length="32" type="string"/>
		<property name="phone" column="cust_phone" length="64" type="string"/>
		<property name="mobile" column="cust_mobile" length="16" type="string"/>
		
	</class>
</hibernate-mapping>

5、在src目录下创建Hibernate核心配置文件:hibernate.cfg.xml
配置文件的dtd可以在hibernate-core-5.4.10.Final.jar包的“/org/hibernate/hibernate-configuration-3.0.dtd”文件中找到。
配置文件的的内容主要有:property标签的name属性值及标签内容的书写格式可以参考“hibernate-release-5.4.10.Final\project\etc”目录下的“hibernate.properties”文件。
①用property标签声明必需的配置:驱动、url、用户名、密码、数据库行话等,数据库行话用于生成符合对应数据库标准的SQL语句;
②用property标签声明其他的配置:是否打印SQL语句、是否格式化SQL语句、是否自动建表等;
③用mapping标签指明映射文件。

<?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://127.0.0.1:3306/hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">1234</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		
		<!-- 可选的配置 -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		
		<!-- 映射的文件 -->
		<mapping resource="cn/jingpengchong/pojo/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

6、新建一个包“cn.jingpengchong.test”,创建测试类:Test
主要步骤有:
①加载配置文件;
②根据Configuration对象创建一个SessionFactory对象;
③根据SessionFactory对象获得一个Session对象;
④根据Session对象开启事务获得一个Transaction对象;
⑤执行增删改查等操作;
⑥根据Transaction对象提交事务;
⑦释放资源。

package cn.jingpengchong.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.jingpengchong.pojo.Customer;

public class Test {
	public static void main(String[] args) {
		//1、加载配置文件
		Configuration configure = new Configuration().configure();
		//2、根据Configuration创建一个SessionFactory
		SessionFactory factory = configure.buildSessionFactory();
		//3、根据SessionFactory获得一个Session对象
		Session session = factory.openSession();	
		//4、手动开启事务
		Transaction transaction = session.beginTransaction();		
		//5、执行增删改查等操作
		Customer customer = new Customer();
		customer.setName("孙悟空");
		session.save(customer);		
		//6、提交事务
		transaction.commit();		
		//7、释放资源
		session.close();
		factory.close();
	}
}

运行结果如下:
在这里插入图片描述
再看数据库中已经有数据了:
在这里插入图片描述

Hibernate的映射文件与配置文件:

映射文件:

class标签的配置:用于建立类与表的映射关系
属性:

  • name:实体类的全路径
  • table:表名
  • catalog:数据库名,可以不写,在配置文件中已经指定

id标签的配置:用来建立类中某个属性与表中主键的映射关系
属性:

  • name:类的属性名
  • column:表中的字段名
  • length:数据长度,hibernate自动建表时使用
  • type:数据类型,hibernate自动建表时使用

property标签的配置:用于建立类中的属性和表中字段的映射关系
属性:

  • name:类的属性名
  • column:表中的字段名
  • length:数据长度,hibernate自动建表时使用
  • type:数据类型,hibernate自动建表时使用
  • not-null:设置非空,hibernate自动建表时使用
  • unique:设置唯一,hibernate自动建表时使用
配置文件:

property标签用于数据库参数的配置:使用hibernate框架必须的参数配置有驱动类、url、用户名、密码、所用数据库的行话等,其他的重要参数配置有:
hibernate.show_sql:是否在控制台打印SQL语句
hibernate.format_sql:是否在打印SQL语句时将其格式化
hibernate.hbm2ddl.auto:自动建表或删表

  • none:当要操作的表不存在时,hibernate不会自动建表而是报错;
  • create:当要操作的表不存在时,hibernate会自动建表,当要操作的表存在时,hibernate会将该表删了,然后重新创建一个表;
  • create-drop:当要操作的表不存在时,hibernate会自动建表,使用完毕后将该表删了,当要操作的表存在时,hibernate会将该表删了,然后重新创建一个表,使用完毕后将该表删了;
  • update:当要操作的表不存在时,hibernate会自动建表,当要操作的表存在时,会使用已经存在的表;
  • validate:当要操作的表不存在时,hibernate不会自动建表而是报错,当要操作的表存在时,会使用已经存在的表;

mapping标签用于指明映射文件。

发布了128 篇原创文章 · 获赞 17 · 访问量 2733

猜你喜欢

转载自blog.csdn.net/qq_43705275/article/details/104194591