Hibernate环境搭建及使用

导入Hibernate的jar包

在这里插入图片描述

创建实体类和数据库表

  • 创建实体类,要求属性唯一,目前手动创建,以后可以逆向工程自动创建实体类。
  • 根据实体类中的属性,创建数据表。其实在使用hibernate的时候,不需要手动创建表。也会自动创建出来。

建立映射关系

使用配置文件,将实体类和数据库表一一对应起来(映射关系)

  • 创建xml格式的配置文件
  1. 映射配置文件名称和位置没有固定要求。
  2. 建议:在实体类所在的包里创建,实体类名称.hbm.xml
  • 配置是xml格式,在配置文件中首先引入xml约束
  1. hibernate中引入dtd约束
插入这行代码在xml文件开头:
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  1. 配置映射关系
    在这里插入图片描述

引入约束文件,解决提示问题

  • 可以看出来,在写xml文件的时候,默认是没有补全提示的,因为没有导入约束,所以我们需要倒入约束,才能使用补全提示功能,这样就会避免自己写的过程中出错。也方便敲代码。
  1. 复制这句话
http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
  1. 点开windows-->preference-->XML Catalog-->add,修改Key typeURL,然后将复制的那句粘贴在key中,在location中选中你.dtd问价的位置,导入进来即可。

创建hibernate的核心配置文件

  • 核心配置文件的格式:xml,名称和位置固定
  • 位置:src下面,名称:hibernate.cgf.xml
  1. src下创建hibernate.cfg.xml,引入约束:
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  • hibernate在操作过程中,只会加载核心配置文件,其他配置文件不会加载
<?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>
	<!-- 1.配置数据库信息 必须要有-->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql:///Hibernate01</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">***</property>
	
	<!-- 2.配置hibernate信息 可有可无-->
	<!-- 输出底层sql语句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 输出底层sql语句格式 -->
	<property name="hibernate.format_sql">true</property>
	<!-- update:如果已经有表,更新,如果没表,自动创建-->
	<property name="hibernate.hbm2ddl.auto">update</property>
	<!-- 配置数据库方言,每个数据库语法有细微不同的差别-->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	
	<!-- 3.把映射文件放到核心配置文件中 必须 -->
	<mapping resource="com/daq/entity/User.hbm.xml"></mapping>
	</session-factory>
	
</hibernate-configuration>
  • 环境搭建好了

测试

  • 实际添加操作
  1. 加载核心配置文件
  2. 创建SessionFactory对象
  3. 使用SessionFactory创建session对象
  4. 开启事务
  5. 写具体逻辑CRUD操作
  6. 提交事务
  7. 关闭资源
  • 代码实现
	@Test
	public void testAdd() {
//		1. 加载核心配置文件
		//在hibernate中封装对象
		Configuration cfg=new Configuration();
		cfg.configure();
		
//		2. 创建SessionFactory对象
		//读取hibernate配置文件的核心内容,来创建sessionFactory
		//在这个过程中,根据映射关系,在数据库中创建表
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		
//		3. 使用SessionFactory创建session对象
		Session session = sessionFactory.openSession();
		
//		4. 开启事务
		Transaction tx = session.beginTransaction();
		
//		5. 写具体逻辑CRUD操作
		//添加的功能
		User user = new User();
		user.setUsername("代澳旗");
		user.setPassword("520");
		user.setAddress("湖北武汉");
		//调用session的方法进行添加
		session.save(user);
		
//		6. 提交事务
		tx.commit();
		
//		7. 关闭资源
		session.close();
		sessionFactory.close();
	}
  • 结果

在这里插入图片描述

  • 千万要注意,映射不能写错了,实体类和数据库的映射不要写错!!!

关键对象

SessionFactory

  • 使用configuration对象创建sessionFactory对象
  1. 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建。
<property name="hibernate.hbm2ddl.auto">update</property>
  1. 创建sessionFactory过程中,特别耗资源
    hibernate操作中,建议一个项目中一般创建一个sessionFactory对象,类似于servlet中的serverContext,用到单例模式的思想,在静态代码块中创建这个对象(因为静态代码块在类加载的时候执行,并且只执行一次),所以抽取到工具类中
package com.daq.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

	/工具类的抽取,写在静态代码块中,保证只创建一个sessionFactory对象

public class HibernateUtils {	
	
	static Configuration cfg = null;
	static SessionFactory sessionFactory = null;

	// 静态代码块实现
	static {
		// 加载核心配置文件
		cfg = new Configuration();
		cfg.configure();
		sessionFactory = cfg.buildSessionFactory();
	}

	// 提供一个方法返回sessionFactory
	public static SessionFactory getSesionFactory() {
		return sessionFactory;
	}
}

Session

  • session类似于jdbc中的connection
  • session是单线程对象(重点!!!)session对象不能共用,只能自己用
  • 调用session中的不同方法实现CRUD操作。
  1. 添加save()
  2. 修改update()
  3. 删除delete()
  4. 根据id查询,get()方法。
  5. 根据主键查询,load()
  6. 条件查询 createCriteria()
  7. 用于数据库操作对象 createQuery()creatSQLQuery()

Transaction

  • 事务对象
4. 开启事务
	Transaction tx = session.beginTransaction();
  • 事务提交和回滚
tx.commit();
tx.rollback();
  • 事务概念
  1. 原子性(要么成功,要么失败)
  2. 一致性(操作之前之后都一样)
  3. 隔离性(多个事务同时操作,他们之间不会影响)
  4. 持久性(当你提交,数据库里面就生效了)

猜你喜欢

转载自blog.csdn.net/weixin_44861399/article/details/105877872