- 浏览: 239082 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
wjpdreamtech:
请问楼主ftp的用户名和密码是什么呢?
oracle10.2.0.4补丁 -
勇敢的核桃:
1 楼 ahut9923 2007-09-28 引用很好! ...
javascript闭包的概念 -
halk:
1-5在哪?
struts2 学习(六) -
ahut9923:
例子在上面的介绍上有啊!
主要是让程序员明白,函数里定义函 ...
javascript闭包的概念 -
esidemayi:
那在实际运用中有什么作用呢?有什么好处?能不能举个列子说明下! ...
javascript闭包的概念
Hibernate入门
++YONG原创,转载请声明
1. 应用程序的分层体系结构:
1.1. 典型的三层结构:
1.1.1. 表示层:提供数据输入、检验与数据呈现的应用程序组件。(GUI、web页面)。就是与用户打交道的UI界面。
1.1.2. 业务层:提供商业逻辑服务的应用程序组件。
1.1.3. 数据层:负责存放和管理应用的持久性业务数据的持久化存储系统。(Database、XML),最常见的持久化存储系统就是广泛使用的关系数据库。
1.2. 软件层的特征:
1.2.1. 每个层由一组相关的类或组件构成,共同完成特定的功能。
1.2.2. 层与层之间存在自上而下的依赖关系。即上层组件会访问下层组件的API,而下层组件不应该依赖上层组件。如:表现层依赖于业务逻辑层,而业务逻辑层依赖于数据层。
1.2.3. 每个层对上层公开API,封装实现细节。当某一层的实现发生改变,只要它的API不变,不会影响其他层的实现。
1.3. 软件分层的优点:
1.3.1. 伸缩性强:能支持更多的用户。
1.3.2. 可维护性高:修改软件的某一层的实现,不会影响其他层。
1.3.3. 可扩展性强:增加新功能更容易,每个层中都有扩展点,不会打破应用的整体框架。
1.3.4. 可重用性高:同一程序能满足多种需求。
1.3.5. 可管理性高:工作、管理模块化。
1.4. 四层结构:
由于数据存储方式多样,业务层不仅要负责业务逻辑的处理,还要跟数据层交互,提供对业务数据的CRUD操作(create、retrieve、update、delete)。为了把业务数据访问细节和业务逻辑分开,把业务数据访问作为单独的持久层。因此目前流行的软件分层结构是:
1. 表示层:
2. 业务层:业务逻辑层负责完成应用程序的逻辑功能,包括调用持久层完成实体对象的存取、安全检查,事务控制等。抽象出业务逻辑层的好处是将应用程序的逻辑功能从表示层中剥离,这样就能复用逻辑层的功能。此外,业务逻辑层也可以看作是对持久层的一个门面模式,简化表示层对这些逻辑功能的调用。
3. 持久层:封装了业务数据访问细节,为业务层提供了面向对象的API。持久层负责实现所有的数据访问功能,它将上层传入的数据写入到持久化存储系统中,并根据上层的要求读取或修改现有的数据。
4. 数据层:
1.5. 完善的持久层应该达到以下目标:
l 代码可重用性高,能够完成所有的数据访问操作。
l 具有相对独立性,当持久层的实现细节发生变化,不会影响上层的实现。
2. ORM简介:
1. ORM(Object-Relation Mapping)对象-关系映射模式指的是在单个组件中负责所有实体域对象的持久化,封装数据访问的细节。
2. Hibernate就是一个开源的ORM中间件。(官方网站: http://www.hibernate.org/)
3. Hibernate简介:
2001年未 Hibernate 第一个版本发表,2003年6月8日 Hibernate 2 发表,并于年未获得 Jolt 2004 大奖,后被 JBOSS 收纳而成为其子项目之一,2005年3月 Hibernate 3 正式发表,当中有了一些重大的改变,本文使用的版本为Hibernate 3.2。
4. 配置 hibernate:
4.1. 准备好所需的jar包:
到官方网站:http://www.hibernate.org/6.html 下载(当前版本:Hibernate Core 3.2.3GA ) hibernate包。解开压缩包。在lib目录下找到以下hibernate应用所必须的包(可以查看该目录下的_README.txt文件来确定哪些包是必需的):
1. hibernate.jar :hibernate核心包。必需的。
2. antlr.jar :Hibernate使用ANTLR来产生查询分析器,这个类库在运行环境下时也是必需的。
3. cglib.jar :CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必需的jar包。
4. asm.jar :ASM字节码库,cglib.jar包依赖的包。必需的jar包。
5. asm-attrs.jar :ASM字节码库,cglib.jar包依赖的包。必需的jar包。
6. commons-collections.jar :Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
7. commons-logging.jar :Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的java.util.logging,如果也找不到就用Simple Logger。必需的。
8. ehcache.jar :Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。
9. jta.jar :JTA规范,当Hibernate使用JTA的时候需要。必需的。
10. dom4j.jar :dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。
11. log4j.jar :日志包,可选的。
把以上必需的jar放置到应用程序的类路径中(web应用的WEB-INF/lib目录下)。
4.2. 基本的Hibernate配置文件:
在WEB-INF/classes目录下创建一hibernate.cfg.xml(在官方下载的包etc目录下有样板文件):
<?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>
<!-- 数据库连接设置 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/demo
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- SQL方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!--实际操作数据库时是否显示SQL -->
<property name="show_sql">true</property>
<!--将数据库schema的DDL导出到数据库 -->
<!--property name="hibernate.hbm2ddl.auto">create </property!-->
<!-- 以下设置对象与数据库表的映像文件 -->
......
</session-factory>
</hibernate-configuration>
|
5. 第一个Hibernate应用程序:
5.1. 创建一个持久化类:
持久化类就是其实例要被持久化到数据库中的类,通常都是实体域类,它是带有一些属性及属性的getters、setters方法的POJO类:
package org.qiujy.demo;
/**
*User持久化类
*第一个Hibernate示例
*@authorAdministrator
*
*/
publicclass User {
private Integer id;
private String name;
private Integer age;
public User(){}
public Integer getAge() {
returnage;
}
publicvoid setAge(Integer age) {
this.age = age;
}
public Integer getId() {
returnid;
}
publicvoid setId(Integer id) {
this.id = id;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
|
5.2. 准备好数据库表:
在MySQL中新增一个demo数据库,并建立user表:
CREATE TABLE user (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
name VARCHAR(100) NOT NULL default '',
age INT
);
|
5.3. 创建对象-关系映射文件:
Hibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是Hibernate映射文件发挥作用的地方。映射文件告诉Hibernate应该访问数据库(database)里面的哪个表(table)以及应该使用表里面的哪些字段(column)。
在持久化类所在的包的目录下创建一名为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="org.qiujy.demo.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
|
5.4. 在Hibernate配置文件hibernate.cfg.xml中指明映射文件的位置:
<session-factory>
<!-- 以下设置对象与数据库表的映像文件 -->
<mapping resource="org/qiujy/demo/User.hbm.xml" />
</session-factory>
|
5.5. 使用Hibernate API进行持久化操作:
1. 创建一辅助类:由这个辅助类来创建一个线程安全的、全局的SessoinFactory,SessionFactory可以创建并打开新的单线程的Session。
package org.qiujy.common;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
* HibernateSession工厂
*/
public class HibernateSessionFactory {
/** Hibernate的配置文件hibernate.cfg.xml */
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
/** Session的线程本地变量 */
private static final ThreadLocal threadLocal = new ThreadLocal();
/** transaction的线程本地变量 */
private static final ThreadLocal txThreadLocal = new ThreadLocal();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
private HibernateSessionFactory() {
}
/**
* 获得一个线程本地化的Hibernate session实例
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* 关闭线程化的Hibernate session实例
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}
/**
* 在本地session实例上开启事务
*/
public static void beginTransaction(){
Transaction tx = (Transaction)txThreadLocal.get();
if(tx == null){
tx = getSession().beginTransaction();
txThreadLocal.set(tx);
}
}
/**
* 在本地session实例上提交事务
*/
public static void commitTransaction(){
Transaction tx = (Transaction)txThreadLocal.get();
if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
tx.commit();
txThreadLocal.set(null);
}
}
/**
* 在本地session实例上回滚事务
*/
public static void rollbackTransaction(){
Transaction tx = (Transaction)txThreadLocal.get();
txThreadLocal.set(null);
if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
tx.rollback();
}
}
}
|
2. 持久化操作类:
package org.qiujy.dao.impl;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.qiujy.common.HibernateSessionFactory;
import org.qiujy.domain.User;
publicclass UseDaoHBImpl {
privatestatic Logger myLogger = Logger.getLogger(UseDaoHBImpl.class);
|
发表评论
-
结合Spring实现设计模式与面向接口编程(不断更新中...)
2011-06-20 14:21 1840在学设计模式的时候,遇到的一个比较大的问题就是,虽然设计模式可 ... -
APACHE common功能列表
2011-06-15 10:56 1575apache-common功能列表 2008-12-01 1 ... -
Myeclipse中启动Tomcat或weblogic服务出现Transport dt_socket failed to initialize,rc=509错误
2010-04-20 10:19 10271。将jdk1.4/jre/bin中的dt_sock ... -
ECLIPSE SVN 图标不见的处理方法
2010-04-20 09:24 2502eclipse 中使用 svn 插件,原本正常,未作任何更改, ... -
NOT IN 和 NOT EXISTS的区别
2009-08-18 14:06 1710EXISTS、IN、NOT EXISTS、NOT IN的区别( ... -
通过无线网卡共享这个网络给另外一台笔记本上网
2009-08-11 22:18 3130通过无线网卡共享这个 ... -
让office2003通过正版验证
2009-05-27 15:08 2267一)该注册表让 Office 2003 通过正版验证: 1、 ... -
myeclipse7下载
2009-05-07 16:52 2954http://ftp.jaist.ac.jp/pub/ecli ... -
电信行业使用的OTDR - 光时域反射仪
2009-03-26 09:31 1252OTDR的英文全称是Optical Time Dom ... -
删除windows 服务
2009-03-11 08:55 1170卸载WINDOWS服务的命令 如果你要 ... -
FLEX2 2044错误的解决方法
2009-02-11 09:43 3913比如这几个Flex错误: 1,调试版本中出现的“调试器或主 ... -
关于Web2.0站点的误区和建议
2009-01-14 16:30 807风雨创业路——关于Web2.0站点的误区和建议 ... -
DisplayTag的使用
2008-11-27 15:32 1231相关文章: displayTag 完全学习笔记 强强 ... -
黑屏的解决方法
2008-10-21 08:50 10728大破解微软xp黑屏方法 1】把Windows的自动更新关掉 ... -
国际:什么是程序员的优秀品质?
2008-10-17 14:23 934原文地址:http://news.csdn.net/n/200 ... -
GUI设计禁忌
2008-10-06 11:17 1077列举Jeff Johnson:《GUI设计 ...
相关推荐
"Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...
本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之配合使用的相关组件。让我们深入探讨一下这些jar包以及它们在Hibernate中的作用。 1. Hibernate核心库: - `hibernate-core.jar`:这...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
**初学Hibernate,Hibernate入门** Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。在Java应用中,通过Hibernate,开发者可以将数据库操作抽象成对象模型,使得代码...
### Hibernate入门知识点详解 #### Hibernate概述与ORM思想 - **定义**:Hibernate是一个开源的、轻量级的对象关系映射(Object-Relational Mapping,简称ORM)框架,它主要应用于JavaEE架构中的DAO(Data Access ...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
**hibernate入门** Hibernate 是一个强大的Java持久化框架,它简化了数据库操作,使得开发者无需直接编写SQL语句即可实现对象与关系数据库之间的映射。这个文档将带你步入Hibernate的世界,了解其基本概念和核心...
【hibernate入门--第一个实例】 Hibernate 是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。通过使用Hibernate,我们可以将数据库操作转换为对Java对象的操作,从而简化了数据库...
《Hibernate入门到精通》这本书是针对Java开发人员深入学习Hibernate框架的一份宝贵资源。Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。通过使用Hibernate,...
### Hibernate入门教程知识点详解 #### 一、Hibernate框架简介 **Hibernate** 是一款开放源代码的**对象关系映射(Object-Relational Mapping,简称ORM)**框架,它为Java应用提供了一种高效的机制,用于处理Java...
### Struts + Hibernate 入门实例(Eclipse 版) #### 一、开发环境搭建 在本章节中,作者朱千平将引导我们完成开发环境的搭建,包括以下几个步骤: 1. **下载安装Eclipse**: Eclipse 是一个开源的集成开发环境...
### Hibernate入门知识点详解 #### 一、环境搭建与配置 - **工程创建**:首先,创建一个名为`HibernateDemo`的Java工程,这是构建Hibernate应用的基础。为了使工程能够识别和运行Hibernate相关的代码,需要正确地...
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,看了这个希望能给你点启示!
**hibernate入门实例操作步骤** Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以使用Java对象的方式处理数据库事务。本篇将详细介绍Hibernate入门实例的操作步骤,...
以下是关于Hibernate入门的一些关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类的过程,通过这种方式,我们可以使用面向对象的编程方式来操作数据,而无需直接编写SQL语句。 2. **...
**Hibernate 教程:带你入门持久化框架** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它为 Java 应用程序提供了便捷的数据持久化服务。本教程将引导你逐步了解 Hibernate 的基本概念、安装配置以及核心...
【标题】:“02_传智播客hibernate教程_hibernate入门案例的细节分析” 在本教程中,我们将深入探讨Hibernate,一个流行的Java对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以更加专注于业务逻辑而不是...