`
wlzjdm
  • 浏览: 26048 次
  • 性别: 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之API初识及增删改查实现案例hibernate003

    参考博文:http://blog.csdn.net/u011638419/article/details/41980311

    Hibernate(3.6)之初识

    NULL 博文链接:https://liuzidong.iteye.com/blog/960322

    精通Java Web整合开发(第2版)

    12.1 初识annotation522 12.2 亲身体验annotation的威力524 12.3 struts 2.x的annotation插件convention-plugin528 12.4 hibernate 3.x的annotation解决之道532 12.4.1 为hibernate应用添加annotation支持532 12.4.2...

    低清版 大型门户网站是这样炼成的.pdf

    2.1 初识mvc新秀struts 2 33 2.1.1 mvc概述 33 .2.1.2 struts 2的mvc实现 35 2.1.3 struts 2的基本组成 36 2.1.4 struts 2的常用类介绍 38 2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理...

    零基础学Java Web开发

     第1章 初识Java语言  第2章 Java基础语法  第3章 Java面向对象编程  第二篇 JSP基本知识  第4章 JSP基本语法  第5章 JSP内置对象  第6章 JSP与JavaBean  第7章 JSP与JDBC  第8章 Servlet编程  ...

    java从入门到精通70个PPT

    1.初识java 2.变量、数据类型和运算符和表达式 3运算符和程序流程结构 4.数组 5.类和对象 6.字符串 7.封装,继承,多肽 8.接口与抽象类 9.java集合类 10.jdbc 11 html简介与js的基本语法 12 javascript内置对象和...

    北大青鸟spring最后一本书的 第五章

    北大青鸟spring最后一本书的 第五章,青鸟(国际)器材销售系统网站--(struts+Hibernate+Spring+Ajax版)【外加自己写的一个简单的,包括数据库】 我把jar包删了 !你需要自己加,就能运行!

    JAVA程序开发大全---上半部分

    第1章 初识MyEclipse 1 1.1 MyEclipse简介 1 1.2 MyEclipse的安装 1 1.2.1 JDK的安装与配置 1 1.2.2 MyEclipse 7.0的安装和运行 4 1.3 获取和阅读MyEclipse帮助文档 5 1.4 本章小结 5 第2章 MyEclipse集成开发环境的...

    Spring Data JPA 原理与实战2021年

    │ 01 Spring Data JPA 初识.mp4 │ 02 Spring Data Common 之 Repoitory 如何全面掌握?.mp4 │ 04 如何利用 Repoitory 中的方法返回值解决实际问题?.mp4 │ 05 @Query 解决了什么问题?什么时候应该选择它?....

    Java Web编程宝典

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    ASP.NET编程宝典光盘源码

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    ASP.NET编程宝典(十年典藏版)》光盘源码1

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    《Java Web编程宝典(十年典藏版)》光盘源码

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    《ASP.NET编程宝典(十年典藏版)》光盘源码2

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    Maven2 的新特性.7z

    Maven 出现到现在也有很长时间了,初识它的感觉至今仍清晰的印在脑海中。现在想来,当时从 Ant 移情 Maven 的想法其实很朴素,就是因为 Maven 可以以网站的形式展现与项目相关的信息,如开发人员列表、各种 Report。...

    精通JSP-Web开发技术与典型应用 光盘代码

    \ch01\* 第1章 初识JSP所有例程代码 \ch02\* 第2章 HTTP和Servlet基础 所有例程代码 \ch03\* 第3章 JSP基本语法所有例程代码 \ch04\* 第4章 JSP内置对象所有例程代码 \ch05\* 第5章 JavaBean在JSP中的应用所有...

Global site tag (gtag.js) - Google Analytics