`
wlzjdm
  • 浏览: 26330 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

初识hibernate

 
阅读更多

注:本文只是本人的个人理解,仅供参考,由于刚刚开始学hibernate框架,里面如果纰漏,还请网友多多指点。

 

我采用的是MyEclipse进行Web开发的。

此次,我打算是将struts2hibernate整合开发,说是整合,也就是将连接数据库的部分用hibernate操作而已。

进入正题。。。

MyEclipse中提供有struts2hibernatespring框架,你可以直接用里面的框架进行编译项目。具体的就靠自己慢慢摸索了(提示一下:MyEclipse->Project Capablities->…里面就包含有Myeclipse提供的框架的jar包)。当我们将框架jar包添加进去之后,如果希望进行删除、修改,那么可以直接在builder path下面进行修改(如果jar包添加在lib目录下面,可以直接在里面删除),但是这样的修改会造成一个问题:当我们通过MyEclipse添加jar包的时候,他会将jar包的一些信息存储到项目文件中,如果我们删除了jar包,那些信息并未删除,当你再想通过Myeclipse添加框架的jar文件的时候,就无法添加。。。那么我们可以采取以下办法解决(假设当前所在的路径为项目的根路径,也就是src所在的路径):1、删除.myhibernatedata文件;2、用记事本打开.project文件,然后删除<buildSpec>元素下hibernate的配置,以及<natrures>下面的hibernate配置。

那么我们手工添加的时候需要添加些什么呢,这个还是一个遗留问题,我在官方网站下载hibernatejar包后,将其复制到lib目录下面,并且将其所需要的辅助jar包也放到lib目录下,但是一直出现问题,由于刚刚开始学习hibernate,此问题暂时遗留,希望知道的朋友还请多多指点。

下面进入正题

下面是后台处理的java文件的UML类图。



 Struts2的配置就不用说了,直接看hibernate的核心部分:

如果希望利用hibernate框架操纵数据库,跟我们平常操纵数据库一样,需要以下一些东西:

1、 数据库文件

2、 驱动文件

3、 数据库操作

那么我们就围绕着这两个条件看看hibernate是如何将其封装的:

首先要了解一个很重要的类:

SessionFactory,它是用来管理所有的会话的(所谓的会话就是当我们访问页面的时候,通过页面与服务器进行信息交流,这就称为一次会话),通常情况下一个项目只有一个会话工厂来管理所有的会话。所以它只需要初始化一次,那么根据这个特性,我们就应该将其设置为static变量。

它的初始化需要Configuration这个类来生成该工厂,那么这个类就是实现了数据库的配置连接,并且将我们建立的模型(此处的模型也就是一个javaBean,例如一个Person类,有姓名、年龄等属性,它就可以成为一个模型)与数据库中的数据表进行映射关联(此处的关联或许也就是一个Map而已),也就是这个类将我们的配置信息(数据库文件、驱动、用户名、密码等信息)进行解析,默认是去解析hibernate.cfg.xml文件,然后去进行数据库连接。

所有的配置文件都直接放在src目录下。

首先看一下hibernate.cfg.xml文件的内容:

 

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>
    	<!-- 连接的URL -->
		<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
		
		<!-- 登录数据库的用户名 -->
		<property name="connection.username">root</property>
		
		<!-- 登录数据库的密码 -->
		<property name="connection.password">wlzjdm</property>
		
		<!-- 连接数据库的驱动 -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		
		<!-- 采用的会话方言,也就是告诉hibernate此次连接的是什么数据库,采用哪种数据库语言 -->
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

		<!-- 是否打印hibernate自动生成的SQL语句,为了方便测试,此处设置为true,当我们部署的时候应该设置为false -->
		<property name="show_sql">true</property>
		
		<!-- 模型与数据库表的关联配置 -->
		<mapping resource="User.hbm.xml" />
	</session-factory>

</hibernate-configuration>

 

 +++++++++++++++++++++++++++++++++++User.hbm.xml

 

<?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>
	<class name="dong.hibernate.model.User" table="user">
		<id name="id" type="int">
			<generator class="increment"></generator>
		</id>
		
		<property name="username" column="username" type="string"/>
		<property name="password" column="password" type="string"/>
		<property name="email" column="email" type="string"/>
		<property name="age" column="age" type="integer"/>
	</class>
</hibernate-mapping>

 

 下面我们就看一下初始化SessionFactory以及Session建立、释放的处理类:

 

package dong.hibernate.util;

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

/**
 * 数据库的辅助类,实现了会话工厂的初始化,实现了一个会话的建立、关闭
 * 
 * @author HS
 * 
 */
public class HibernateUtil
{
	/**
	 * 会话工厂,通常来说,当服务器启动之后,会话工厂只有一个,它对应于一个数据库的配置文件,默认的命名为hibernate.cfg.xml,它
	 * 将数据源与hibernate进行关联。
	 */
	private static SessionFactory sessionFactory;

	/**
	 * 当该类加载的时候就应该初始化会话工厂
	 */
	static
	{
		try
		{
			sessionFactory = new Configuration().configure()
					.buildSessionFactory();
		}
		catch (HibernateException he)
		{
			he.printStackTrace();
		}
	}

	/**
	 * 打开一个会话,例如当一个网页访问一个action,而action需要进行数据库操作的时候,它就会请求DAO新建一个会话,然后 间接操纵数据库。
	 * 
	 * @return 返回建立的会话
	 * @throws HibernateException
	 */
	public static Session openSession() throws HibernateException
	{
		return sessionFactory.openSession();
	}

	/**
	 * 关闭当前会话,当会话完成之后应该将其关闭,否则会浪费系统资源,使得系统越来越慢
	 * 
	 * @param session
	 *            要关闭的会话
	 * @throws HibernateException
	 */
	public static void closeSession(Session session) throws HibernateException
	{
		if (session != null)
		{
			session.close();
		}
	}
}

 那么当我们了解完生成一次会话的方法之后,下面重点看一下会话(Session)的内容:

 

Session就是java应用和hibernate之间的一个桥梁,通过Session可以讲java对对象的操作(增删改查)传递给hibernate框架,让hibernate去转换会对数据库的操作。

(SQL:INSERT)增加数据的方法:save(), persist()

(SQL:DELETE)删除数据的方法:delete()

(SQL:UPDATE)更新数据的方法:update() or merge()

下面就看一下处理代码吧:

package dong.hibernate.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import dong.hibernate.dao.UserDAO;
import dong.hibernate.model.User;
import dong.hibernate.util.HibernateUtil;

/**
 * DAO层的一个实现类,针对mysql类型的数据库进行操作
 * 
 * @author HS
 * 
 */
public class UserDAOImpl implements UserDAO
{

	@Override
	public boolean add(User user)
	{
		Session session = null;
		Transaction tx = null;
		try
		{
			session = HibernateUtil.openSession();
			tx = session.beginTransaction(); 
			 
			session.save(user);
			
			tx.commit();
			return true;
		}
		catch (HibernateException he)
		{
			tx.rollback();
			he.printStackTrace();
			return false;
		}
		finally
		{
			System.out.println("execute");
			HibernateUtil.closeSession(session);
		}
	}
}
 

至此就完成了一个对数据的增加操作。剩下的就是自己采用传统的方式进行测试了,测试内容就不写了。。。

看完后,我们容易理解:

1、 数据库文件跟以前一样就是你的计算机上安装的数据库了

2、 连接数据库时需要的参数信息,也就是hibernate.cfg.xml文件中的内容了

3、 数据库的操作,这个也就是我们平常对对象的操作,然后将操作传递给hibernate,让hibernate转换为对数据库的操作。

还有一个很重要的类就是Transaction,这个类中的方法是用来实现将session的请求提交的。如果我们仅仅通过Session进行save操作的话,并不会将内容添加到数据库中。具体使用参考官方文档。。。
分享到:
评论

相关推荐

    Hibernate(3.6)之初识

    这篇文章将带你初识Hibernate 3.6,了解其基本概念、配置以及如何进行简单的数据操作。 1. **对象关系映射(ORM)**:ORM 是一种编程技术,用于将关系数据库的数据映射到面向对象的模型中。通过ORM,开发人员可以...

    beginning hibernate 源代码

    《初识Hibernate源码》是针对Java开发人员深入理解Hibernate框架的一款学习资源。Hibernate作为一款强大的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。源码分析有...

    hibernatetools-Update-4.1.1.zip

    《Hibernate Tools 4.1.1:提升数据库与对象映射的效率》 Hibernate Tools是...无论你是初识Hibernate的新手还是经验丰富的老手,这个工具都能为你的开发工作带来实质性的帮助,降低项目复杂度,提升开发速度。

    Beginning Hibernate For Hibernate 5 (4th Edition) + Source Code

    《初识Hibernate:针对Hibernate 5的指南》(第四版)是专为深入理解Hibernate ORM框架而编写的一本详尽教程。这本书不仅提供了全面的理论知识,还包含了配套的源代码,使得读者能够通过实践更好地掌握Hibernate的...

    深入浅出Hibernate

    总之,《深入浅出Hibernate》是一本全面而深入的Hibernate教程,它将带领读者从初识Hibernate到精通使用,是Java开发者的宝贵学习资料。通过阅读本书,你将能够熟练掌握Hibernate框架,提升数据库操作的效率,更好地...

    beginning.hibernate.from.novice.to.professional

    《初识Hibernate:从新手到专业》是一本深入浅出介绍Hibernate框架的书籍,适合对Java编程有一定基础但对Hibernate不熟悉的读者。Hibernate是Java领域中广泛应用的对象关系映射(ORM)框架,它极大地简化了数据库...

    hibernate 详解

    - "hibernate_day02_pm.zip"可能包含了初识Hibernate的基础知识,如环境搭建、基本操作等。 - "hibernate_day03_pm.zip"可能涉及到SessionFactory和Session的使用,以及实体类的创建。 - "hibernate_day04_pm.zip...

    HIBERNATE - 符合Java习惯的关系数据库持久化.doc

    总体而言,《Hibernate - 符合Java习惯的关系数据库持久化》为Java后端开发人员提供了一套全面的指南,涵盖了从初识Hibernate到高级特性的所有关键点,对于希望掌握和使用Hibernate进行数据库操作的开发者来说,是一...

    hibernate开发文档

    1. **初识Hibernate**:这部分介绍Hibernate的基本概念,包括它在Java应用程序中的作用,以及如何通过配置文件(如hibernate.cfg.xml)来设置数据源和连接参数。文档可能还涉及了SessionFactory和Session的创建与...

    hibernate参考手册

    一、引言与初识Hibernate 1. **引言**:本手册旨在提供Hibernate框架的全面指南,适合初学者和有经验的开发者使用。Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用程序与数据库交互。 2. **第一部分...

    Hibernate之API初识及增删改查实现案例hibernate003

    **标题:“Hibernate之API初识及增删改查实现案例hibernate003”** 在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能,使得开发者可以使用面向对象的方式来...

    BeginningHibernate_英文版

    《初识Hibernate:深入浅出的Java ORM框架指南》 Hibernate是Java开发中广泛使用的对象关系映射(ORM)框架,它为Java开发者提供了一种高效、便捷的方式来管理数据库操作,将复杂的SQL语句和数据库交互转化为面向...

    Java_Web程序设计教程_范立峰第8章习题答案

    本章节主要介绍了初识Hibernate框架的相关知识点。 1. Hibernate框架简介 Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库。它通过XML配置文件或注解将Java类与数据库表...

    hibernate第一个hibernate

    《Hibernate入门:初识与实践》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将带领初学者深入理解Hibernate的第一个项目,帮助你快速入门并掌握其核心概念。...

    hibernate-examples:简单的Hibernate示例

    **初识Hibernate示例** 在`hibernate-examples-master`这个项目中,可以看到一系列关于Hibernate基础操作的示例。这些示例可能包括了实体类的定义、配置文件的设置、以及如何在Java代码中进行CRUD操作的演示。通过...

Global site tag (gtag.js) - Google Analytics