Hibernate旅程(二)Hibernate实例

Hibernate旅程(一)Hibernate架构概述 Hibernate引出 曾学过三层架构,三层分别为界面层、业务逻辑层、数据持久层。在javaweb中,界面层和业务逻辑层可以使用struts框架来封装一些常用的操作。而在我们的数据持久层中,对数据库的增删改查,我们经常要手动的控制事务,各种sql语句查询,各种参数传递,无论是对哪个表操作使用的均是同一种思路进行操作的。既然是同一种思路,那就是重复的东西了。而且我们还要和关系型数据库打交道,而不单 阅读详情

上篇大概的介绍了Hibernate框架,本篇一个简单的hibernate例子来学习。


Hibernate配置

(1)  创建自己的java项目。

(2)  向自己的项目中添加Hibernate的相关的jar,我们可以创建自己的UserLibrary,这样就直接加入这个依赖包就可以了(如图2.12.2)。


2.1


2.2

需要添加上的jar包包括,a、加入hibernate-3.2/lib/*.jar b、加入hibernate-3.2/hibernate2.jar c、加入数据库驱动(mysql驱动可以去官网上下载)这样添加到我们自定义的依赖包中,再在程序中引入这个包就可以了。

(3)加入hibernate配置文件,在学struts的时候我们常用的配置文件是struts-config.xmlhibernate的配置文件hibernate.cfg.xml,我们可以在hibernate-3.2\etc\hibernate.cfg.xml目录下拷贝到我们项目中的src下。

这样以上步骤就完成了几本hibernate的基本配置。

(4)接下来我们要建立我们的实体类了,以便完成对象与表的映射。建立User实体类,完成实体类的映射User.hbm.xml。代码如下所示。

User类代码:

      package com.bjpowernode.hibernate;

import java.util.Date;

//user实体。
public class User {
	//用户编号。
	private String id;
	
	//名字。
	private String name;
	
	//密码。
	private String password;
	
	//创建日期。
	private Date createTime;
	
	//失效时间。
	 private Date expireTime;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public Date getExpireTime() {
		return expireTime;
	}

	public void setExpireTime(Date expireTime) {
		this.expireTime = expireTime;
	}

}

 User.hbm.xml代码如下所示:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.auction">

	<class name="com.bjpowernode.hibernate.User" >
		<id name="id">
			<generator class="uuid" />
		</id>
		<property name="name"/>
		<property name="password"/>
		<property name="createTime"/>
		<property name="expireTime"/>
	</class>
</hibernate-mapping>


(5)  User.hbm.xml文件加入到hibernate.cfg.xml文件中,代码如下所示。

      <!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory name="foo">
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/Hibernate_first</property>
		
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<property name="hibernate.show_sql">true</property>
		
		<!--<property name="hibernate.format_sql">true</property>  -->
		
		
		<mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

 

(6)  编写工具类,ExportDB.java生成数据库中的表,代码如下所示。

     package com.bjpowernode.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * 将hbm生成ddl.
 * @author summer
 *
 */
public class ExportDB {

	/**将hbm生成ddl.
	 * @param args
	 */
	public static void main(String[] args) {

		//使用hibernate相关类configuation.
		//默认读取hibernate.cfg.xml文件.
		Configuration cfg = new Configuration().configure();
		//接受配置文件.
		SchemaExport export = new SchemaExport(cfg);
		//打印到控制台,输出到数据库.
		export.create(true, true);
		
	}

}

 

(7)  建立客户端类Client,向表User中添加数据。代码如下所示。

      

     package com.bjpowernode.hibernate;

import java.util.Date;

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

/**
 * 客户端向表中添加数据.
 * @author summer
 *
 */
public class client {

	
	public static void main(String[] args) {
		//默认读取的是hibernate.cfg.xml 文件.
		Configuration cfg = new Configuration().configure();
		
		//建立SessionFactory.
		SessionFactory factroy = cfg.buildSessionFactory();
		//取得session.
		Session session = null;
		
		try
		{
			//通过工厂取得session
			session = factroy.openSession();
			
			//开启事务.
			session.beginTransaction();
			//给对象赋值.
			User user = new User();
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			
			//保存user对象到数据库.
			// 一个实体类对象对应一个数据库中的表.
			session.save(user);
			
			//先拿到前面事务的对象.再提交事务.
			session.getTransaction().commit();
		}catch( Exception e)
		{
			e.printStackTrace();
			//回滚事务.
			session.getTransaction().rollback();
		}finally{
			
			if(session!=null)
			{
				if(session.isOpen())
				{
					//关闭session.
					//hibernate中已经将connection的的关闭封装了.
					//我们没有看到任何一条sql语句.
					session.close();
				}
			}
		}
	}
}

 

(8)  加入log4j配置文件,将该配置文件拷贝到我们自己项目的src下,便于调试和跟踪。

(9)建立自己的数据库,执行ExportDB.java生成数据库中的表,执行client.java完成了对象与关系数据库表的对应,如下图3.2,建立的User表。

      

图3.2

                  

 

Configuration

上述代码中,Configuration类负责管理Hibernate的配置信息,一个Configuration类的实例代表了应用程序中java类到数据库映射的集合。我们创建一个Configuration实例,并通过这个实例创建SessionFactory实例。   //默认读取的是hibernate.cfg.xml文件.

           Configurationcfg = new Configuration().configure();

           

           //建立SessionFactory.

           SessionFactoryfactroy = cfg.buildSessionFactory();

在这里默认读取的是hibernate.cfg.xml文件,在新建一个Configuration的实例时,Hibernate会在类路径中查找hibernate.properties文件和hibernate.cfg.xml文件,如果两个文件同时存在,则hibernate.cfg.xml将覆盖hibernate.properties文件。如果两个文件都不存在则抛出异常。我们也可以指定配置文件的路径,不用系统默认的hibernate.cfg.xml文件:Stringfilename= “my_hibernate_cfg.xml” Configuration config = new Configuration().configure(filename);


Hibernate配置文件

从配置文件中可以看出,这个配置文件描述的是数据库的信息,如数据库看的URL、用户名、密码,hibernate使用方言(那种数据库),同时还可以管理数据库中各个表的映射文件,还可以配置事务策略等。


SessionFactory

SessionFactory负责Session实例的创建,为了创建一个SessionFactory对象,必须在Hibernate初始化的时候创建一个Configuration类的实例,并将已经写好的映射文件交给它处理。这样Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象创建成功后,Configuration对象就没用过了。SessionFactory是线程安全的,可以被多个单线程调用以取得session对象,而构造SessionFactory要消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,在这里我们可以考虑使用静态方法,来解决这个问题。在上述代码的基础上我们抽取出一个工具类,用来专门实例化工厂管理session,并且采用static每次只初始化一次,代码如下所示。

package com.bjpowernode.hibernate;

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

public class HibernateUtils {
	
	private static SessionFactory factory;

	//static只初始化一次.
	static
	{
		try{
		//默认读取的是hibernate.cfg.xml 文件.
				Configuration cfg = new Configuration().configure();
				
				//建立SessionFactory.
				factory = cfg.buildSessionFactory();
	
		}catch(Exception e )
		{
			e.printStackTrace();
		}
	}
	
	public static Session getSession()
	{
		//打开session.
		return factory.openSession();
	}
	
	//关闭session.
	public static void closeSession(Session session)
	{
		//判断是否为空.
		//判断是否是打开状态再进行关闭.
		
		if(session!=null)
		{
			if(session.isOpen())
			{
				session.close();
			}
		}
	}
	
	//返回工厂类.
	public static SessionFactory getSessionFactory()
	{
		return factory;
	}
}
	

Session

SessionHibernate运作的核心,对象的声明周期、事务的管理以及数据库的存取都与它息息相关。Session是由SessionFactory创建的,SessionFactory是线程安全的,而Session不是线程安全的,所以让多个线程共享一个session,会引起冲突。

 

下一篇Hibernate持久化对象的三个状态

 

 

 

 

 

Hibernate旅程(四)Hibernate对数据库删除、查找、更新操作 上篇,我们以向数据库添加操作来演示hibernate持久化对象的三种状态。本节继续hibernate对数据库的其他操作,删除、查询、修改。 Hibernate对数据删除操作 删除User表中个一条数据,是需要更具User表的主键id值来删除的。首先根据id值向数据库中查询出来对应的对象。可以采用两种方式一是session的get方法,一个是session的load方法。 Session的Ge 阅读详情

相关推荐

Hibernate旅程(五)Hibernate映射--基本类映射和对象关系映射

回想一些我们在没有学习ssh的时候,我们建立数据库的表时,首先是数据库建模E-R图,然后再通过实体模型来建立关系模型,再建立相应的表。实体间存在三种关系,一对一,一对多(或者说多对一),多对多。而如今我们要根据类来映射相应的表,那只能是通过类与类之间的关系加上映射文件来映射数据库的表。我们学习UML建模,类与类之间存在五种关系,继承,实现,关联,依赖,聚合/组合,在hibernate中实体类之间的

Xinghf 1万+

Hibernate基础讲解和示例

文章目录1 Hibernate1.1 简介1.2 Hibernate能干什么1.3 Hibernate运行时体系结构1.3.1 SessionFactory (org.hibernate.SessionFactory)1.3.2 Session (org.hibernate.Session)1.3.3 Transaction (org.hibernate.Transaction)1.3.4 ConnectionProvider (org.hibernate.connection.ConnectionProv

上善若泪 1020

Hibernate基础示例教学:快速掌握6个关键操作

本文还有配套的精品资源,点击获取 简介:Hibernate是一个简化Java数据库操作的持久化框架。本教程提供了六个简单示例,目的是帮助初学者快速理解Hibernate的核心概念和基本使用方法。内容涵盖实体映射、Hibernate配置、SessionFactory和Session的使用、数据查询、更新和删除操作,以及懒加载和级联操作。通过这些示例,学习者将能够掌握Hiber...

weixin_32251525的博客 1266

Hibernate实例

让我们看一个独立应用程序利用 Hibernate 提供 Java 持久性的例子。我们将通过不同的步骤使用 Hibernate 技术创建 Java 应用程序。 创建 POJO 类 创建应用程序的第一步就是建立 Java 的 POJO 类或者其它类,这取决于即将要存放在数据库中的应用程序。我们可以考虑一下让我们的 Employee 类使用 getXXX 和 setXXX 方法从而使它们变成符合 JavaBeans 的类。 POJO (Plain Old Java Object) 是 Java 的一个对象,这种对

草原印象的博客 609

hibernate简单使用示例

开发中我们会使用一些持久层框架,而Hibernate则是相当不错一个。ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。其实就是将关系和对象通过映射文件进行联系。我们在程序中只需要操作对象即可操作对应的数据库表的数据。 1. 什么是hibernate?开...

iSuperGifted的博客 336

Hibernate的介绍及入门小案例

1、Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段的数据表进行增删改查时,编写的SQL语句不但很长,而且繁琐,容易出错; 在读取数据时,需要些多条getXXX语句从结果集中取出各个字段的信息,不但枯燥重复,并且工作量非常大。 2001年,澳大利亚墨尔本一位名为Gavin King的27岁的程序员,上街买了一本SQL编程的书,他厌倦了实体be..

Z_Z_S_的博客 399

Hibernate简单示例

一、概述 Hibernate是一种ORM框架,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象。 通过配置文件或者使用Java注解把Java对象映射到数据库上,自动生成SQL语句并执行。 、添加Hibernate特性 1.建立Web项目,并添加Hibernate特性。 2.把MySQL的驱动加入classpath中

Luck_ZZ的博客 953

Hibernate旅程(三)Hibernate持久化对象的三个状态

Hibernate中的对象有3中状态,瞬时对象(TransientObjects)、持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象)。 下图3.1显示了瞬时对象、持久化对象和离线对象之间的关系以及它们之间的转换。 图3.1 临时状态:由java的new命令开辟内存空间的java对象也就是普通

Xinghf 3万+

Hibernate旅程(八)Hibernate缓存机制--级缓存

Hibernate级级缓存 上篇介绍了Hibernate一级缓存,主要是session缓存,session生命周期结束,缓存也就结束。级缓存相对于一级缓存来说是一个范围更广阔一些,就比你住的地方周围有多个小卖铺(session缓存),和一个大型超市,原料加工厂送货的时候送小卖铺一份的同时,必然送一份到超市。而给第个小卖铺送一份的同时,也送给超市一份,这个超市就是我们的Session

Xinghf 4329

Hibernate旅程(七)Hibernate缓存机制--一级缓存

Hibernate一级缓存 缓存就是你去小卖铺买东西,不用再去生产车间里买东西,当小卖铺倒闭了,也就是session缓存生命周期结束。hibernate一级缓存的声明周期很短,和session的生命周期一致,hibernate的一级缓存也叫做session级缓存,或叫事务级缓存。下面来看session控制的一级缓存。 同一session中使用两次load()进行查询。 代码入

Xinghf 5593

Hibernate旅程(九)Hibernate缓存机制--查询缓存

Hibernate查询缓存 我们介绍了Hibernate一级缓存,级缓存。而hibernate级缓存时针对Id查询的缓存策略,对于条件查询则毫无作用。因此hibernate提供了针对条件查询的QueryCache(查询策略)。 下面来看session控制的查询缓存。 一、查询缓存配置 1、          在hibernate.cfg.xml中加入查询缓存

Xinghf 3185

Hibernate旅程之一

Hibernate提出 MVC三层架构,分别是界面层

u012778718的博客 215

Hibernate入门示例

在 Java Web 开发应用中,Hibernate可以作为应用程序的数据访问层。 这里以一个简单用户注册用例来说明如何开发一个Hibernate的应用程序。 该例子的需求:把注册页面输入的用户名、密码、性别、年龄方面的信息存入数据库中。 如果采用经典的MVC模式的话,那么各层的构建如下: 视图层:注册页面(register.jsp)、反馈信息页面(reply.jsp) 控制层:RegisterServlet.java模型层/数据访问层:基础类HibernateSessionFactory.jav...

renxingzhadan的专栏 363

Hibernate入门:一个简单的helloworld示例

Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序中数据持久化的操作。Hibernate在数据库和面向对象的数据模型之间提供了一个自动的映射,使得Java开发者可以不需要编写原生SQL语句,通过操作Java对象就能实现对数据库的操作。它的核心是将一个对象映射到数据库表中,通过使用映射文件(XML或注解)来定义实体类与数据库表之间的对应关系。Hibernate的使用使得代码更加清晰,可维护性提高,同时,它还提供了缓存机制,提高了应用程序的性能。

weixin_42601608的博客 1029

Hibernate的入门配置例子

Hibernates入门案例视图Customer类<——CustomerService ^ | | V Hibernate Hibernate API [对象关系映射] Hibernate配置文件 | V 关系数据库 [customer表] 第一步:建立itcastHibernate工程第步:

爱的叹息的专栏 676

Hibernate 例子

接下来,定义一个简单的实体类Employee,它将被映射到数据库表employee。return id;

qq_33240556的博客 613

Hibernate入门经典实例

http://blog.csdn.net/yidamr/article/details/8755401 hibernate是开源的,用于封装数据访问层的组件,称为:数据访问层框架(持久层框架) 写一个入门案例,体现hibernate的工作方式!明白hibernate作用及其程序结构! 例子:用Hibernate实现增删查改案例 环境: IDE工具:Myeclipse ,m

Baple的专栏 1150
上一篇: Hibernate旅程(一)Hibernate架构概述
下一篇: Hibernate旅程(三)Hibernate持久化对象的三个状态
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值