Hibernate的配置和测试

本文详细探讨了Hibernate的配置过程,包括核心配置文件的设置、数据库连接信息的配置以及实体映射文件的创建。同时,文章还介绍了如何进行单元测试,确保Hibernate的正确运行与数据操作的有效验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Hibernate的配置

(1)首先我们要从网上下载到hibernate的包,在里面的lib包下面找到required包下面所有的jar文件复制到我们项目下面的lib文件夹下。
(2)hibernate需要在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-configuration>
	<session-factory>
		<!-- JDBC数据库连接信息 -->
		<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
		<property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=test</property>
		<property name="connection.username">test</property>
		<property name="connection.password">test</property>
		<!-- 数据库的方言 -->
		<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
		<!-- 配置是否显示SQL -->
		<property name="show_sql">true</property>
		<!-- 配置是否自动创建或修改表结构 -->
		<property name="hbm2ddl.auto">update</property>
		<!-- 配置PO 上面是采用映射文件 下面是采用注解方式-->
		<mapping resource="hiberate/model/Student.hbm.xml" />
		<mapping class="hibernate.model.Person"/>
	</session-factory>
</hibernate-configuration>


(3)如果是采用写入映射文件的方式,则需要在实体类的同一个包下面包含映射文件,如Person.hbm.xml对应于Person类的映射:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- 用来描述一个持久化类,name是类的全名
	 	table 可以不写  默认值和类名一样 
	 	catalog  数据库的名称  一般不写
	 -->
	<class name="hibernate.Person">
		<!-- 标示属性  和数据库中的主键对应 name是属性的名称 column是列的名称-->
		<id name="pid" column="pid" length="200" type="java.lang.Long">
			<!-- 主键的产生器 告诉hibernate容器用什么样的方式产生主键 -->
			<generator class="increment"></generator>
		</id>
		<!-- 描述一般属性-->
		<property name="pname" column="pname" length="20" type="string"></property>
		<property name="psex" column="psex" length="10" type="java.lang.String"></property>
	</class>
</hibernate-mapping>

(4)如果是采用注解方式来完成和数据库之间的映射,则直接在所在的实体类中用注解的方式进行映射。如下:
@Entity
@Table(name="person")
public class Person {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	
	@Column
	private String name;
	
	@Column
	private Date birth;
	
	// List集合注解
	@ElementCollection(targetClass=String.class)  // 指定集合元素的类型
	@CollectionTable(name="school"  // 表名
		,joinColumns=@JoinColumn(name="person_id", nullable=false)  // 关联字段
	)
	@Column(name="school_name")
	@OrderColumn(name="order_level")
	private List<String> schools = new ArrayList<String>();
	// Map注解
	@ElementCollection(targetClass=Integer.class)  // 指定Map中Value的类型
	@CollectionTable(name="school_map"  // 表名
		,joinColumns=@JoinColumn(name="person_id", nullable=false)  // 关联字段
	)
	@MapKeyColumn(name="school_name")  // 对应Map的Key字段名
	@MapKeyClass(String.class)	// Map中Key的类型
	@Column(name="qty")  // Map中Value的字段名
	private Map<String, Integer> schools = new HashMap<String, Integer>();
	//下面是set和get方法

(5)下面是dao层的编写,首先是HibernateUtil类的编写,然后是用dao层的实现类来继承这个类实现查插删改各种功能:
package hibernateUtil;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil{
	public static SessionFactory sessionFactory;
	static
	{
		//取配置信息,自动读取配置文件
		Configuration configuration=new Configuration();
		configuration.configure();
		//创建服务注册对象
		ServiceRegistry  serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.ge<span style="white-space:pre">		</span>tProperties()).buildServiceRegistry();
		//获取会话工厂对象
		sessionFactory =configuration.buildSessionFactory(serviceRegistry);
	}
}

(6)下面是测试是否成功连接数据库,示例代码如下:
package test;

import hibernateUtil.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import entity.Person;

public class hibernateTest extends HibernateUtils{

	@Test
	public void testInsert() {
		Session session=sessionFactory.openSession();//打开session
		Transaction transaction=session.beginTransaction();//开启事务
		Person person=new Person();
		Person.setName("hello");
		Person.setSex("男");
		session.save(person);//person对象临时状态转为持久化状态
		transaction.commit();//事务提交
		session.close();//session关闭,person对象持久化状态转为脱管状态
	}

}

7)测试成功后,我们解释一下第六步中的几种状态。画图简单表示一下如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值