欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate环境搭建及使用

程序员文章站 2024-03-21 09:43:04
...

导入Hibernate的jar包

Hibernate环境搭建及使用

创建实体类和数据库表

  • 创建实体类,要求属性唯一,目前手动创建,以后可以****自动创建实体类。
  • 根据实体类中的属性,创建数据表。其实在使用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. 配置映射关系
    Hibernate环境搭建及使用

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

  • 可以看出来,在写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();
	}
  • 结果

Hibernate环境搭建及使用

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

关键对象

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. 持久性(当你提交,数据库里面就生效了)