Hibernate

中南大学

信息科学与工程学院

计算机科学与技术专业

刘晓明

Hibernate知识点复习(注重原理)学习大纲:(hibernate tools)

一,简介

(https://www.360docs.net/doc/c213514311.html,)满江红翻译Hibernate总结:冬眠

开源持久化框架(ORM)对象关系型映射框架Object relation Model

关系型数据库

软件的分层:1,呈现层2,业务逻辑层3,持久化层4,数据库

在JDBC基础上进行封装,只需要少量的代码就可以完成持久化的工作

对数据库的操作需要的步骤:

1,Configuration

2,创建SessionFactory,

打开Session,开始一个事务,

持久化操作,提交事务,关闭Session

常用的API,Configuration用于解析Xml

SessionFactory 类似于驱动

Session 类似于Connection

复习:不要将具有业务含义的字段作为主键

第一个例子:具有两个配置文件,一个是Hibernate.cgf.xml

和数据库进行交互的一个领域对象的配置文件:User.hbm.xml

可以将目录与目录下面的文件看成是一对多的关系,目录删掉了

那么里面的文件同时也就给删掉了

域对象之间的关系:关联(Association),依赖(Dependenct)相互依赖,某一个需要另外的来进行完成:聚集(Aggregation)整体和部分的关系,一般化(Generalization)<继承>

对数据库的响应的,增加,删除,修改,查询,加载等都是对数据库的持久化操作

JDBC,DriverManager :驱动管理器,负责创建数据库连接 Connection:代表数据库连接 Statement:负责执行sql 语句

PreparedStateMent :负责执行sql 语句,具有预定义sql 语句的功能

ResultSet:代表sql 查询语句查询的结果集,查询的结果一般都是放在结合里面

面向对象的概念 关系模型的概念 类 表 对象 记录 属性

Connection

DriverManager

Statement

ResultSet

PreparedStatement

域模型与关系模型又是不匹配,例如:1,域模型之间的继承关系2,域模型中有多对多关联关系,关系模型通过连接表来表示多对多关联关系

3,域模型中有双向关联关系,关系模型只有单向参照关系,

而且总是many 方参照one方

4,域模型提倡的细粒度模型,关系模型提倡的是粗粒度的模型

多方参照一方

二,Hibernate开发之旅

(一),对象关系映射文件中的知识点

Hibernate中的数据类型type:string https://www.360docs.net/doc/c213514311.html,ng.String

Date或timestamp

(二),常用的API

(1)Configuration,用来解析XML

(2)SessionFactory,相当于JDBC中的DriverManager,二级缓存

重量级二级缓存

(3)Session相当于JDBC中的Conection

Configuration cfg = new Configuration().configure();

SessionFactory factory = cfg.buildSessionFactory();

Session session = factory.openSession();

但是这段代码只是测试的代码,只是单线程的,因为Session

是单例类的,必须要用Session绑定当前的线程Session中的方

法save(),delete(),update(),persist(),merge(),createQuery();

(4)Query

(三),主键的生成策略

(1)native,根据底层数据库自动选择主键生成策略,但是主键的类型必须是数字型

native的主键是数据库生成的,在保存时会马上发送sql语

句,就是在session.save();

(2)uuid不是数据库的行为32位根据ip地址动态算出主键

uuid不是数据库的行为,在https://www.360docs.net/doc/c213514311.html,mit()的时候或是

flush()的时候出现sql

(3),sequence 在利用Oracle

在主键生成中,

seq_person_id

因为序列可以自动加1

(4)assigned,手动分配ID,调用save方法不会马上分配ID

因为分配Id的这个行为不是数据库的行为,所以在进行数据库存储的时候不会马上发ID(就是在session.save(object)的时候不会发sql语句),而是在https://www.360docs.net/doc/c213514311.html,mit(),的时候才会发送sql语句(四),Hibernate对象的3种状态

瞬时状态Transient

Hibernate的3

大状态

持久化状态

Persistence

游离状态detach

三种状态的转换:

1,当一个对象object new的时候就编程的瞬时状态

2,在session.save(object)方法时就编程了持久化状态(一级缓存状态) 被session进行管理的,数据库有一条数据库记录进行对应

3,在session关闭的时候对象就变成了游离状态,

游离状态不被session进行管理,但是有一条数据库记录

与之进行对应,这个对象是可以被更改的

4,在delete()方法后对象变成了游离状态

5,瞬时状态调用load(),get(),evict()方法使对象直接进行持久化状态

注意:在利用update方法时,有些人可能会new一个对象然后在例如User user = new User();

然后利用session.update(user);

正常来讲是会报错的

因为update方法更新的持久化状态或游离状态的对象

User user = (User)Session.load(User.class,2);

user.setName("lxm");

或者是Session.save(user);

user.setName("changet");

Session.update(user);

6,Get不支持延迟加载,load支持延迟加载,

Load(),方法是在查出来的对象在用到的时候才开始进行sql语句的发送

(五)Hibernate关联映射

1,多对一,(单方)

(1),多对一关联映射(在开发中用的最多)

可以从多方导航到一方

就是在多方(User)的映射文件中添加配置文件

(2),注意应该先插入一方然后在插入多方既

Session.save(dept);然后session.save(user1);session.save(user2);

(3),但是如何保存多方,同时保存一方,这就应该在配置文件上下功夫,使用级联操作,真正开发很少这样做

cascade=”save-update”/>

这个时候就session.save(dept);就可以省略了,直接利用session.save(user1),session.save(user2);就可以了

(4),在对相应对象进行查询的时候

在查多方的时候。例如,User,由于User里面有外键、Session.get(User.class,1);这个时候如果映射文件中

中的lazy没有显示的写出来

这是只会发送一条语句select user_id ,user_name,salary,dept_id from

t_user, where user_id = ?;

而查询dept的语句

Select dept_id ,dept_name,location from t_dept.where dept_id = dept_id; 会在用到dept的时候才会发送出来

如果在配置文件中如果lazy=false显示的写出来的话那么,在查询多方的时候就会连同级联的一方的内容同时的查询出来,

既:如果在配置文件中这样写

这样在session.get(User.class,1);的时候就会发送两条语句

Select user_id ,user_name,salary,dept_id from t_user;

Select dept_id,dept_name,lacation from t_dept; where dept_id = dept_id; 这里面涉及了延迟加载技术

注意:利用load()方法在进行查询的时候就是支持延迟加载技术的,而且在用到主键的时候也不会发送sql语句,因为主键在查询的时候已经给定了,这也是一种性能优化的策略。

2,一对多(单方)

(1)由一方导航到多方

在一方的配置文件中进行配置

Team(一方),team_id会在多方Person体现

注意:这个发送sql的顺序是

由于在person中的主键生成策略为native,

在session.save(team),session.save(person1),session.save(person2);

发sql的顺序是,insert into t_team values(?,?);

Insert into t_person values(?,?);

Insert into t_person values(?,?);

update t_person t_team = ? where person_id =?

update t_person t_team = ? where person_id = ?

在https://www.360docs.net/doc/c213514311.html,mit(),没有提交的时候相应的逐渐还没有生成,所以在刚开始的时候team_id是没有的,所以在team真正的插入到数据库之后在去更新相应的t_person表,所以在外键不允许为空的时候就会出现问题,

但是在配置文件中将inverse=true,将维护方进行反转,将维护权转给多方进行维护先插入person 就会报错,报错的原因就是在插入person的时候team_id无法插入进去(2)这里是一对多的关系,如何只提交一方同时也提交了多方呢

这就再次的想到了级联,所以在一方配置文件中设置级联cascade=“true”

但是关联关系仍然需要一方来维护,inverse=”true”就会出问题

关系的维护方由哪方维护,就只关注那一方

Person(多方)

3,多对一关系(双向);

标签上的lazy属性默认的是lazy=false

Lazy出现的地方,Class,普通属性,set标签,标签中

在多方和一方都要写配置文件

4,一对一关系(主键关联映射)

一对一的最关键的地方就是在其中一方的一个属性既是主键

又是外键

5,一对一关系(外键关联映射);

将其中一方当作多方,进行外键的映射,但是在

必须保证unique属性的值为true

6,多对多

(1)在进行多对多双向关联映射,会生成中间表,中间表的主键是双方

的主键共同构成,在多对多双方进行进行set标签的进行配置。

在双方的配置文件为

例如Teacher与Student

Student表的配置文件

table="t_teacher_student">

Teacher配置文件

(3)在写类是写一个中间的过度类,

Teacher Student Teacher_Student3个类,

将多对多关系分割成为两个多对一关系

(六)联合主键映射

序列化的作用就是将对象的状态保存起来

例如在一个人的名字包括firstName和lastName;

将这里的firstName 和lastName进行抽取,单独的生成了一个类。例如在

Public class Composite{

private Name name;

private Float salary;

private Date birthday;

}

Public class name{

Private String firstName;

Private String lastName;

}

然后在Composite的配置文件是这样配置

注意Name类一定要实现序列化接口

(七)Hibernate组件映射

相应的提取类不需要实现序列化接口

也是将相应的属性进行提取;更加的体香面向对象的

思想。

例如这个类Compontent类

Public Compontent{

Private Integer compontentId;

Private String compontName;

Private Address address;

}

Public class Address{

Private String email;

Private String location;

Private String location;

}

在配置文件中

这个和联合主键关联映射很相似,一个是将主键进行提取,一个是将相应的相关的属性进行提取,

(八)Hibernate继承关系映射

有一个Animal cat dog

1,生成一张表

Animal {name} cat extends Animal{eyecolor} dog extends

Animal{furcolor}

Id name Furcolor eyecolor type

1 Cat Null black C

2 Dog yellow null D

有一个重要的标签标识器,用来标识类型

相应的配置文件为

unique="true"/>

2,每个类生成一个表

但也只需要一个配置文件就可以了,生成表的大致的形式是。T_animal

Animal_id name

1 小猫

2 小狗

3 二狗

T_cat

Cat_id eyeColor

1 Black

T_Dog

Dog_id furColor

2 yellow

3 White

相应的配置文件为

这里的dog_Id与cat_id既是主键又是外键

相应的配置文件:

package="com.oristand.hibernate.domain.tableperclass">

not-null="true" unique="true" length="10"/>

length="10"/>

length="10"/>

Hibernate3.6(开发必看)

1.Java对象持久化概述 1.1.应用程序的分层体系结构 1.1.1.基于B/S的典型三层架构 说明: 1,展现层:提供与用户交互的界面。 2,业务逻辑层:实现各种业务逻辑。 3,数据访问层:负责存放和管理应用程序的持久化业务数据。 1.1. 2.数据访问层与Hibernate在Java应用程序中的 角色 数据访问层(持久化层)封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标: 1,代码重用性高,可完成所有的数据访问操作。 2,如果需要的话,能够支持多种数据库平台。 3,具有相对独立性,当持久化层变化时,不会影响上层实现。 在数据访问层(持久化层)中可以使用Hibernate框架以实现要求,如下图所示:

1.2.软件模型 1.2.1.各种模型的说明 概念模型: 模拟问题域中的真实实体。描述每个实体的概念和属性及实体间关系。不描述实体行为。实体间的关系有一对一、一对多和多对多。。 关系数据模型: 在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构。有以下内容组成:1,若干表 2,表的所有索引 3,视图 4,触发器 5,表与表之间的参照完整性

域模型: 在软件的分析阶段创建概念模型,在软件设计阶段创建域模型。 组成部分: 1,具有状态和行为的域对象。 2,域对象之间的关联。 域对象(domain object): 构成域模型的基本元素就是域对象。对真实世界的实体的软件抽象,也叫做业务对象(Business Object,BO)。域对象可代表业务领域中的人、地点、事物或概念。 域对象分为以下几种: 1,实体域对象:通常是指业务领域中的名词。(plain old java object,简单Java 对象)。 2,过程域对象:应用中的业务逻辑或流程。依赖于实体域对象,业务领域中的动词。如发出订单、登陆等。 3,事件域对象:应用中的一些事件(警告、异常)。 1.2.2.域对象间的关系 关联: 类间的引用关系。以属性定义的方式表现。

hibernate架构图

.Hibernate 架构图 Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate 可以应用在任何使用JDBC 的场合,既可以在Java 的客户端程序使用,也可以在Servlet/JSP 的Web 应用中使用,最具革命意义的是,Hibernate 可以在应用EJB 的J2EE 架构中取代CMP ,完成数据持久化的重任。 Hibernate 的核心接口一共有5 个,分别为:Session 、SessionFactory、Transaction 、Query 和Configuration 。这5 个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。 ·Session 接口:Session 接口负责执行被持久化对象的CRUD 操作(CRUD 的任务是完成与数据库的交流,包含了很多常见的SQL 语句。) 。但需要注意的是Session 对象是非线程安全的。同时,Hibernate 的session 不同于JSP 应用中的HttpSession 。这里当使用session 这个术语时,其实指的是Hibernate 中的session ,而以后会将HttpSesion 对象称为用户session 。 ·SessionFactory 接口:SessionFactory 接口负责初始化Hibernate 。它充当数据存储源的代理,并负责创建Session 对象。这里用到了工厂模式。需要注意的是SessionFactory 并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory 就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory 。

Hibernate学习入门教程

Hibernate学习入门教程 开发环境搭建 [日期:2015-08-11] 来源:Linux社区作者:doctorJoe [字体:大中小] 其实一两个月前就在了解Hibernate方面的知识了,但一直以来,都没有好好的总结,而且一直使用的是myeclipse,感觉有些傻瓜式的操作就可以搭建起Hibernate的开发环境,但这样一点都不好,没有理解到Hibernate到底是怎么配置的,所以你今天特使用Eclipse来一步一步搭建Hibernate的开发环境,下面,正式进入正题。 在Hibernate中开启日志https://www.360docs.net/doc/c213514311.html,/Linux/2015-07/120499.htm Hibernate+JUnit测试实体类生成数据库表https://www.360docs.net/doc/c213514311.html,/Linux/2015-07/120161. htm Hibernate整体理解https://www.360docs.net/doc/c213514311.html,/Linux/2014-07/104405.htm Hibernate的映射机制https://www.360docs.net/doc/c213514311.html,/Linux/2014-12/110265.htm 新建一个web项目,名字就随便吧,你喜欢什么名字就什么吧,这是我的截图。

引入hibernate的依赖jar包,我使用的是hibernate-release-4.3.10.Final,下载好后解压,打开压缩包下的lib目录下的require文件夹,这是hibernate的所以来的必须的jar包,接下来,在刚才新建的项目里新建一个libs文件夹,将刚才的所说的jar包copy进去,另外,由于我们需要连接MySQL数据库以及使用JUnit测试,将所需的mysql-connector-java-5.0.8-bin.jar和junit-4.5.jar两个jar包引用进去,关于这些jar包,可以在网上搜索。接下来,就是把这些jar 包添加到编译环境中去,选中libs下的jar包,右击选择Build Path –>Add to Build Path,这样就把依赖jar包成功添加进去了。 继续往下,我们需要配置最重要的hibernate配置文件hibernate.cfg.xml以及进行日志处理的log4j.properties属性文件:打开上一步解压后的hibernate文件夹,打开project—>etc文件夹,将该文件夹下的hibernate.cfg.xml和log4j.properties文件拷贝到项目的src文件夹下,打开hibernate.cfg.xml文件,将session-factory标签中的内容替换成如下的内容: org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql:///hibernatedemo root yzp140103 这样就配置好了。 接下来,要做的就是做开发测试了:在项目的src目录下新建一个实体类包com.joe.entity,在该包下新建一个实体类Student,代码如下: package com.joe.entity; import java.io.Serializable;

hibernate和spring框架技术难点及其要点总结

个人总结希望能给你带来一些帮助,限于时间篇幅只能如此,如有不方便之处,望见谅. 出处个人博客: https://www.360docs.net/doc/c213514311.html,/blog hibernate二级缓存 二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享阅读全文>> 标签:缓存hibernate hibernate配置 2012-6-20 15:50:00 点击:19 评论:0 hibernate与jdbc应用对比 一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的... 阅读全文>> 标签:hibernate jdbc 2012-5-21 13:57:00 点击:0 评论:0 HibernateDaoSupport与JdbcDaoSupport Dao 的支持类可以有好多,如: JdbcDaoSupport , HibernateDaoSupport ,JdoDaoSupport等,下面对最常用的HibernateDaoSupport与JdbcDaoSupport做一小总结:一、在Spring框架中实现连接数... 阅读全文>> 2012-5-21 13:53:00 点击:1 评论:0 Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询... HQL查询方式这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多。条件查询、分页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象。其它的,包括一些查询函数(count(),sum()等)、... 阅读全文>> 标签:hibernate 2012-5-21 13:51:00 点击:1 评论:0 hibernate的createSQLQuery的几种用法 用法一:对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式:List cats = sess.c... 阅读全文>> 2012-5-21 13:44:00 点击:0 评论:0 HQL:hibernate查询返回各类型结果数据 1. 查询整个映射对象所有字段Java代码 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 &nbs... 阅读全文>> 2012-5-21 13:38:00 点击:1 评论:0 HQL:Hibernate查询语言 在where子句中允许使用的表达式包括大多数你可以在SQL使用的表达式种类:数学运算符+, -, *, /二进制比较运算符=, >=, <=, <>, !=, like逻辑运算符and, or, notin, not in, between, is nu... 阅读全文>> 2012-5-21 13:34:00 点击:0 评论:0 Hibernate 参数设置一览表 属性名用途hibernate.dialect一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect hibernate.show_sql输出所有SQL语句到控制台. 有一... 阅读全文>>

MyEclipse+Hibernate+快速入门+中文版

提纲 1前言2准备工作3介绍4Hibernate 一览5创建HibernateDemo 项目 5创建HibernateDemo Java Project 5555使用模版调整生成更好的代码55编辑映射文件 6使用HQL 编辑器 7测试HibernateDemo 应用 8使用示例HibernateDemo 项目 9 总结1.前言 本文档基于以下环境编写:Sun JDK 1.5,Eclipse 3.2和MyEclipse 5.0.所有的截屏基于Eclipse,MyEclipse Enterprise Workbench,和Windows XP 的默认用户界面设置.如果你对本文档的介绍有阅读上的困难,请阅读用户反馈部分来了解如何向MyEclipse 文档团队提交反馈. 2.准备工作 下面是这个快速入门的准备工作列表: Java 2SDK,Standard Edition 1.4或者更高版本(参考来了解下载地址) Eclipse 3.2SDK (参考资源来了解下载地址) MyEclipse 5.0(参考资源来了解下载地址) 选择以下可以被Hibernate 和MyEclipse Database Explorer 所支持的数据库服务器列表中的一个 : MyEclipse Hibernate 快速入门中 文版

3.介绍 这个快速入门展示了使用MyEclipse Enterprise Workbench 开发Hibernate 的基本功能,概念和技术.我们将全程带领你来开发一个非常简单的Java Hibernate 应用.对于这个教程没有包含到的问题和概念,我们推荐你去参考资源部分列出的Hibernate 资源. 这个文档展示了如何进行下列工作: 为Java 项目添加MyEclipse Hibernate 支持 在项目中创建Hibernate 配置文件 如何使用自定义的Session Factory 从Database Explorer 的表定义中生成Java 类和Hibernate 数据库映射文件(.hbm ) ?使用HQL 编辑器 创建使用Hibernate 的小测试应用注意:在使用本教程时建议您事先阅读了Database Explorer 快速入门这个教程来了解如何创建连接和元数据功能. 4.Hibernate 一览 Hibernate 是一个非常流行的开源的易于配置和运行的基于Java 的对象-关系映射(JORM)引擎.它提供了很丰富的功能包括: 多种映射策略 可迁移的持久化 单个对象映射到多个表 支持集合 多态关联可自定义的SQL 查询 Axion Hypersonic DB InstantDB Interclient Firebird ODBC Bridge jTDS Mckoi Microsoft SQL Server Mimer SQL MySQL Oracle Pointbase PostgresQL SAPDB Sunopsis XML Sybase ThinkSQL

整合SSH三大框架介绍

一.在MyEclipse里先建立一个Web project 的项目,选最新版本的java ee。 二.添加struts2框架支持 1.引入struts2必须得几个jar包,放在WebRoot->WEB-INF->lib 目录下。 2.将WEB应用部署到tomcat服务器上:找到tomacat的安装目录Tomcat6.x\apache-tomcat-6.0.33\conf,打开其中的server.xml文件,在文件末尾上面加入例如 这样的句子,其中path的值为你需要访问网站的上下文,docBase的值为该web项目的WebRoot所在的目录,最后一个readloadable最好选true。 3.在WebRoot->WEB-INF->web.xml中加入struts2的过滤

器将部署好的应用纳入到struts2的管辖范围类,具体代码如下 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPre pareAndExecuteFilter struts2 /* 4.在web项目的src目录下,建一个struts.xml文件,这里是处理struts整个流程的文件。在其中加入 上面的name随便取,extends绝对不能变。 5.这样以后,启动tomcat服务器看看能不能正常启动,如果正常启动后,在浏览器上访问,http://localhost/上下文/index.jsp看能不能进入,若能进入则表示struts2的框架已经成功加到web项目中了,可以开始下一步了。

hibernate框架必问的面试题

108.为什么要使用 hibernate? hibernate 是对 jdbc 的封装,大大简化了数据访问层的繁琐的重复性代码。 hibernate 是一个优秀的 ORM 实现,很多程度上简化了 DAO 层的编码功能。 可以很方便的进行数据库的移植工作。 提供了缓存机制,是程序执行更改的高效。 109.什么是 ORM 框架? ORM(Object Relation Mapping)对象关系映射,是把数据库中的关系数据映射成为程序中的对象。 使用 ORM 的优点:提高了开发效率降低了开发成本、开发更简单更对象化、可移植更强。 115.hibernate 中如何在控制台查看打印的 SQL 语句? 在 Config 里面把 hibernate. show_SQL 设置为 true 就可以。但不建议开启,开启之后会降低程序的运行效率。 116.hibernate 有几种查询方式? 三种:hql、原生 SQL、条件查询 Criteria。 117.hibernate 实体类可以被定义为 final 吗? 实体类可以定义为 final 类,但这样的话就不能使用 hibernate 代理模式下的延迟关联提供性能了,所以不建议定义实体类为 final。 118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? Integer 类型为对象,它的值允许为 null,而 int 属于基础数据类型,值不能为 null。 119.hibernate 是如何工作的? 读取并解析配置文件。 读取并解析映射文件,创建 SessionFactory。 打开 Session。 创建事务。 进行持久化操作。 提交事务。 关闭 Session。 关闭 SessionFactory。 120.get()和 load()的区别? 数据查询时,没有 OID 指定的对象,get() 返回 null;load() 返回一个代理对象。 load()支持延迟加载;get() 不支持延迟加载。

Hibernate常见概念以及关键技术

软件开发的分层思想: 三层架构: 数据表现层业务逻辑层数据持久层 SUN的桌面应用Swing AWT 普通Java类JDBC SUN的WEB基本应用JSP 普通Servlet JDBC SUN的WEB高级应用JSF SessionBean Persistence WEB国内流行开源Struts Spring Hibernate 一、对象持久化的理论 1.对象持久化:内存中的对象转存到外部持久设备上,在需要的时候还可以恢复。 2.对象持久化的原因(目标):// 是基础工作!是信息共享的主要原因 物理:1) 内存不能持久,需要在硬盘上持久保存//(物理上,物理的都不是根本原因) 2) 内存容量有限,需要在容量更大的硬盘上保存 应用:3) 共享(Internet的本质:信息的收集、整理、发布) //最重要的原因 4) 检索(大规模) //也很重要 5) 管理(备份、安全) 3.怎样进行对象持久化?(仅从JA V A方面讲) 物理:1) 对象序列化 2) DB技术(JDBC 数据库) 4.怎样利用数据库做对象持久化? 优点:功能完备、理论上效率高 缺点:复杂(难)、代码量大、面向R(过程;二维表关系) 2) EJB 仅讲Entity Bean 优点:封装JDBC 缺点:更复杂的API、重量级(侵入式)、功能不完备、难共享 缺点的后果:开发周期长、测试困难、面向过程 以上是2.0之前的版本,但3.0跟Hibernate基本一样 3) ORM 轻量级框架(Hibernate) 现阶段最佳的持久化工具:文档齐全、服务很好、工业标准、大量应用、易学 优点:封装JBDC、简单的API、轻量级(只做持久化)(用类库)、PO(持久对象)->POJO(纯JA V A)、开源 缺点:不够JDBC灵活 5.结论: 1)对象持久化是必须的 2)必须使用DB来实现 3)Hibernate必须的(现阶段最佳选择) 开源工具的通常问题:1.文档不全;2.服务不全;3.标准化不够 而Hibernate避免了所有这些问题 二、ORM和Hibernate的相关知识(理解)

SSH框架概述

SSH框架 Ssh为struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。 集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和 hibernate。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate 的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理struts和hibernate。 业务流程 系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责接收请求(Request)和传送响应(Response),然后Struts根据配置文件(struts-config.xml)将 ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。 采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。 框架结构 Struts1 Struts对Model,View和Controller都提供了对应的组件。 ActionServlet,这个类是Struts1的核心控制器,负责拦截来自用户的请求。

hibernate教程

一、使用Hibernate的3个准备和7个步骤 准备1:导入Hibernate库(jar包); 准备2:添加配置文件-Hibernate.cfg.xml jdbc:microsoft:sqlserver://localhost:1433;Database=zf sa pwd com.microsoft.jdbc.sqlserver.SQLServerDriver #配置数据库链接 org.hibernate.dialect.SQLServerDialect #数据库方言 true #设置运行时是否在控制台显示SQL语句 #映射文件,可以有多个 准备3:添加实体类和映射文件(User.hbm.xml) 类: public class User implements java.io.Serializable { //要实现Serializable private Integer uid; private String uname; private String upass; public User(){// 要有默认构造方法 } // Getter and setter } User.hbm.xml: 列名

Eclipse从入门到精通(第二版)_ch37

第37章 在Eclipse中使用Hibernate 本章将把Hibernate应用到myweb项目中,对数据库层的代码进行改造,同时还会介绍一些Hibernate工具的使用。 37.1 概述 37.1.1 持久化框架产生的背景和现状 什么叫持久化?数据在内存中,关机后就会丢失。而如果把数据保存到后台的数据库中,就能达到“持久”保存数据的目的。而持久化框架的目的就是为了帮助用户更好地使用数据库。 在Java数据库项目中,由于数据库是关系型而非面向对象的。很多时候,用面向对象方法完成了前期的设计和分析,到了数据库层编程时就会变得很别扭,其中最痛苦的就是写面向过程的SQL语句。 J2EE开发主要由JSP、Servlet、JavaBean和EJB 4部分组成。其中EJB是J2EE中一个比较重要的部分,它提供了企业级开发所需的分布式支持。但现实中的大部分项目都是单服务器的轻量级项目,一般都不会涉及分布式的开发环境,这时用EJB就像大炮打蚊子,蚊子没打到,房子却被打破个洞。EJB的笨重和复杂一直让开发者很不满,其中EJB中Entity Bean受到的批评最多,现实项目中鲜有使用Entity Bean的成功范例。 开发者急切地需要一种符合Java编程习惯的、适合轻量级开发的、易于使用的数据库持久化解决方案。在这个背景下就产生了轻量级的数据库持久化技术,其中最主要的就是Hibernate、JDO。 Hibernate是一个民间开源项目,有点像一个草莽英雄,但Hibernate从实用出发的设计思路,使得它脱颖而出成为最流行的持久化技术。Hibernate的作者Gavin King也一举成名,现已成为EJB 3.0专家组的成员,并且在EJB 3.0的Entity Bean部分,将采用和Hibernate 类似的设计方案。因此,Hibernate是开发者学习和使用持久化技术的一个比较好的选择,即使以后EJB 3.0一统天下,所学的Hibernate知识也不会浪费。 JDO 2.0是经JCP(Java规范管理委员会,由SUN、IBM、Oracle等共同参与)承认的一个正式规范,所以也受到了开发者很大的关注。估计未来3年内,持久化技术将以EJB 3.0、Hibernate和JDO 2.0为主,成三足鼎立之势。

Struts+Spring+Hibernate框架搭建

整合SSH框架 整合框架版本:hibernate-distribution-3.6.0.Final-dist + spring-framework-2.5.6.SEC01-with-dependencies + struts-2.1.8.1 一、搭建工具 Windows 、Tomcat 6.0+ 、MyEclipse、SQLServer2008 R2 、Google 二、创建工程 新建WEB项目工程(MyEclipse),包含web.xml配置文件。 三、添加框架环境Junit4 右击新建的项目,选择Build Path —> Add Library —> Junit —> 选择Junit4 —> 确定完成单元测试的添加。 四、添加框架环境Struts2 1.解压struts- 2.1.8.1 ,如下图所示: 可在apps文件里,随机选择一个.war文件解压,到WEB-INF→lib下的基础jar文件:

复制黏贴添加到项目工程的lib下。也可将lib下的全部jar(71个)都复制到项目中来,不过很多用不到。我们崇尚即用即加的原则…… 2. 配置struts.xml和web.xml文件,如下: web.xml: ItcastOA struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndE xecuteFilter struts2 /* index.html index.htm index.jsp default.html default.htm default.jsp struts.xml:

SpringData概述

Spring Data JPA 致正在路上行走的程序员: 人生只有一条路不能选择——那就是放弃的路;人生只有一条路不能拒绝——那就是成长的路 一.什么是SpringDataJPA? SpringData项目的目的是为了简化构建基于spring框架应用的数据访问技术,包括非关系型数据库,另外还包括对关系型数据库的访问支持。对于拥有海量的项目,可以用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。 二.Spring Data JPA有什么咋们主要来看看Spring Data JPA 提供的接口,也是Spring Data JPA的核心概念: 1.Repository:最顶层的接口,是一个空的接口,目的是为了统一所有 Repository的类型,且能让组件扫描的时候自动识别。 2:CrudRepository :是Repository的子接口,提供CRUD的功能。 3:PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能。 4:JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。 5:JpaSpecificationExecutor:用来做负责查询的接口 6:Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可 三.接下来.咋们来学习一下如何使用Spring Data JPA 1.需要先下载Spring Data JPA的发布包(需要同时下载Spring Data Commons和Spring Data JPA两个发布包,Commons是Spring Data的公共基础包),并把相关的依赖 JAR 文件加入到CLASSPATH 中。 2.让持久层接口Dao(以OrderRepository)继JpaRepository 接口,(该 接口使用了泛型,需要为其提供两个类型,第一个为该接口处理的域对象类型,第二个为该域对象的主键类型)

实验 五 Hibernate基础实验

实验五Hibernate基础实验 Part one Hibernate对表的添加 实验目的:掌握Hibernate的基本功能和基本用法 实验要求:通过Hibernate将一个Java对象插入到数据库表中 实验原理: (1)Hibernate是一个面向Java环境的对象/关系数据库映射工具,Hibernate不仅管理Java类型到数据库表的映射,还提供查询数据 和操作数据的OO方法。 (2)Hibernate对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲地使用OO编程思想来处理数据库。 (3)Hibernate采用映射元数据来描述对象-关系的映射细节,元数据通常采用XML。 (4)关系数据库中的元组通过ORM转换成应用程序中的对象;反之,应用程序中的对象通过ORM持久化成关系数据库中的元组。 (5)可以利用Hibernate框架根据配置和类及映射文件生成数据库表结构,反过来,也可以根据数据库表结构生成持久化类和映射文 件。 实验准备: 安装SQL Server20XY(如果是Windows XP上的SQL Server2000版,需要加补丁程序SP3)。 实验步骤: 一.创建Java Project TestH3_2 二.创建数据库及数据源 1.在test数据库中创建表News Use test CREATE TABLE news ( id int IDENTITY (1, 1) primary key ,

title varchar (20) NOT NULL , content text ) Go context的长度在Hibernate中可能闲长,不能插入,需改成较短的类型!设计表结构的图形界面如图5-1所示。 图5-1 设计News表结构的图形化界面 2.打开MyEclipse的Database Explore透视图,如图5-2所示。 图5-2 打开Database Explore透视图 3.创建数据库连接驱动,如图5-3所示。找到jtds-1.2.jar包所在位置。点击Add JARS,把该包包含进去即可。注意:SQL Server的Driver template 选Microsoft SQL Server(jTDS Driver)。

Struts、Spring、Hibernate三大框架的原理和优点

Struts的原理和优点. Struts工作原理 MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示: Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理, 视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库:Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。 控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。 模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。 核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。 Struts优缺点 优点: 1.开源软件,能更深入的了解其内部实现机制。 2.Taglib标记库,灵活动用,能大大提高开发效率。 3.页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

利用轻量对象关系映射技术Hibernate提高开发效率

利用轻量对象关系映射技术Hibernate提高开发效率 Enhancing Development Efficiency with Hibernate a Lightweight Object/Relational Mapping Technology 谢挺 周维民 (上海大学机电工程与自动化学院,上海 200072) 摘 要 Hibernate是一种轻量对象关系映射技术。文章通过实例,介绍了Hibernate的一些关键特性,并阐述了该技术的一些局限性。 关键词 Hibernate 对象关系映射企业级JavaBeans 持久化 Abstract Hibernate is a lightweight Object/Relational Mapping(ORM) technology. Some key features of Hibernate are illustrated, and some limits of this technology are expounded. Keywords Hibernate Object/Relational Mapping (ORM) EJB Permanence 0 引言 随着internet的发展,应用服务程序已经从集中式、C/S模式过渡到B/S、分布式模式;无论是用户或是供应商都迫切希望缩短开发周期、提高开发效率,Hibernate应运而生。 1 Hibernate简介 Hibernate是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(Object/Relational Mapping , ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型中去。 Hibernate不仅提高Java类到数据库的映射,还提供数据查询和获取数据的方法。Hibernate在英语中的意思是“冬眠”,顾名思义它使得商务逻辑的开发和数据库最大程度地分离,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是解放开发者通常与数据持久化相关的编程任务的95%。对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是很有用的。 图1是Hibernate的体系结构图,从图中可以Array看到,系统为3层B/S模式,应用程序在客户端运 行将持久化的对象交由Hibernate。Hibernate通过 properties属性设置和XML Mapping实现商务逻 辑,调用和存储低层数据库后将返回的结果送给 客户端。 Hibernate对每一种数据库都有对应的 Dialect进行操作优化,从而提高它在各种情况 下的效率。目前,它的版本为3.0、支持的数据 库有Oracle、DB2、MySQL、PostgreSQL、Sybase,Interbase、Pointbase、Microsoft SQL Server、