当前位置:文档之家› 利用轻量对象关系映射技术Hibernate提高开发效率

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

利用轻量对象关系映射技术Hibernate提高开发效率
利用轻量对象关系映射技术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、

MckoiSQL、 Progress、SAP DB 以及HypersonicSQL。

2 Hibernate的优势

由图1可以很清楚地看出,对象持久化是整个体系中最为重要的一环,为此解决方案也很多。现今用得最多的分布式应用技术体系当然是Microsoft的.net和Sun公司基于Java的J2EE 以及OMG的CORBA,他们都已经制定出了自己的标准。.net的对象持久化由DCOM等组件实现,J2EE则制定了EJB规范。然而问题是.net缺乏可移植性和跨平台性。EJB在这方面优势明显,不过仍存在以下几个缺点:

① 实体Bean不支持继承,而这是面向对象的主要特征之一;

② CMP Bean在关系模型表中被定义为一对一的关系,即粒度过粗,不能体现出Java丰富的对象类型。而如果粒度太细,又会影响到EJB的可重用性。因为可重用的组件要求定义粒度较粗的对象,这样只需要在接口处做小的改动;

③ 在实际的应用程序中,实体Bean定义细粒度远程接口是不能够序列化的,因此J2EE 开发人员不得不在分布式系统中定义额外的数据传输对象(data transfer objects,DTO);

④ 由于很多供应商都有生产CMP引擎的能力,使得元数据的映射有各自的特殊性。而且EJB规范过于笨重,倒置了控制框架。

与此相比,Hibernate是站在开发人员角度上产生的技术,所以极大地提高了编程效率。它的关系数据库持久化符合Java习惯,而且O/R(对象-关系)映射机制灵活,其特有的面向对象的查询语言(HQL)相对于结构化查询语言(SQL)更加便于使用,程序代码简洁,系统可维护性强。APIs简洁实用提高了执行效率,并且集成在J2EE中。

3 Hibernate的持久化原理

图2 Hibernate API分层结构

图2是Hibernate API结构的高度概括。从图中可以看出,业务逻辑层是在持久化层之上的。而实现一个实例首先要使用Configuration接口配置和引导Hibernate,再通过SessionFactory接口建立会话工厂。业务逻辑层的持久化类然后才能调用Session、Transaction、Query等接口实现业务逻辑。上述3个API可以实现基本的业务逻辑CRUD(create, read, update, delete)和查询功能。还有一些接口如UserTpye, CompositeUserType和IdentifierGenerator可以用来扩展Hibernate的功能。最后,Hibernate使用了许多现有的Java API,包括JDBC、Java 事务API(JTA)和Java命名及目录接口(JNDI)。JDBC允许几乎所有的数据库被Hibernate支持。

JNDI和JTA允许Hibernate与J2EE应用服务器进行集成。

其中Configuration和SessionFactory是最基本的API,而后才使用Transaction、Query等API 实现和扩展功能。下面我们通过一个实例来了解Hibernate的一些优点。

在开始Hibernate实例之前必须进行必要的配置,这里由于篇幅的关系就不具体介绍,细节可以察看Hibernate的官方网站。本实例中使用的是Apache Tomcat servlet容器,Hibernate为最新的3.0版本,数据库使用了SQL Server。当然Hibernate也支持大多数J2EE服务器和主流的数据库。这里给出一个书目查询系统的实例来说明问题。首先需要创建配置文件hibernate.cfg.xml和libruary.xml, 这两个文件将被放在classpath下,在hibernate初始化期间会自动在classpath中寻找这个文件。hibernate.cfg.xml是对诸如数据库驱动、数据库路径、数据库名称已经事务处理等属性的配置。

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

"https://www.doczj.com/doc/653054477.html,/hibernate-configuration-3.0.

dtd">

jdbc:jtds:sqlserver://localhost:1433

net.sourceforge.jtds.jdbc.Driver

Login

123

net.sf.hibernate.dialect.SQLServerDialect

.......

Libruary.xml的源文件如下:

PUBLIC "//

Hibernate/Hibernate Mapping DTD//EN"

"https://www.doczj.com/doc/653054477.html,/hibernate mapping3.0.

dtd">

在这段程序中,我们首先调用了configuration类。Configuration类负责管理Hibernate的配置信息,包括数据库URL、数据库JDBC驱动等等。使用Hibernate 必须首先提供这些基础信息以完成初始化工作,为后继操作做好准备。这些属性在Hibernate配置文件hibernate.cfg.xml中加以设定,而后才能调用session类和Transaction类。注意这里使用的查询语言并不是结构化查询语言SQL,而是hibernate本身提供的一种功能强大的查询语言HQL,这是一种全面面向对象的、具备继承、多态和关联等特性的语言,它直接对类操作,屏蔽了login数据库中的LIBRUARY表,所以才使代码变得简洁易读。在实际的项目中,查询的情况更为复杂和频繁,HQL语言的优势将更加明显。

4 结束语

Hibernate是一种新型的、轻量对象关系映射技术,由于Hibernate技术实现简单,其优秀的持久化机制极大提高了编程效率,增加了系统的可移植性、可维护性,得到了程序开发人员的好评,广泛运用在包括电子商务在内的WEB开发中。本文介绍了Hibernate的体系结构和主要的API接口功能,期望能为基于J2EE平台下WEB的开发提供一条捷径。但是我们也应该认识到Hibernate仅仅是一种ORM实现,也没有规范化,是否选择Hibernate作为持久层实现,需要结合实际情况,比如对遗留系统的改造项目中,ibatis可能更合适。

参考文献

1 LINDA DEMICHIEL.Hibernate in Action.Greenwich: Manning Publications Co. 2005

2 Sun Microsystems.Hibernate Reference Document.https://www.doczj.com/doc/653054477.html, .

3 宋汉增,沈琳.利用Hibernate对象持久化服务简化Java数据库访问.计算机应用,2003.23(12)

4 王子君,范学峰.EJB技术的探讨与研究.计算机工程,2002.28(2)

Hibernate配置文件的DTD

Hibernate中有两个配置文件 映射文件Xxx.hbm.xml 映射文件的的文件头DTD文件内容:

配置文件hibernate.cfg.xml 配置文件的文件头DTD文件内容: org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost/minmin?characterEncoding=gb2312 root minmin true create

Hibernate练习题

Hibernate&EJB考试试题 1、下面关于Hibernate说法正确的是()(选择两项) A)Hibernate是ORM的一种实现方式 B)Hibernate不要JDBC的支持 C)属于控制层 D)属于数据持久层 2、下面关于ORM的说法错误的是()(选择两项) A)对象关系映射,让现实中的对象同数据库的表产生映射(类与表产生映射) B)对象关系映射,让类同表产生关系 C)对象关系映射,让类同记录产生关系(类的实例与记录(表中的一行数据)产生关系) D)对象关系映射,让类中的属性同表中的列产生关系 3、下面关于Hibernate中Session的说法正确的是()(选择两项) A)Session是轻量级的,可以随意的创建和销毁 B)Session是重量级的,不能随意的创建和销毁 C)Session是线程安全的 D)Session不是线程安全的 4、在Hibernate中,以下()不属于session的方法 A、close() B. open() C. update() D. delete() 5、下面关于Hibernate中load和get方法说法正确的是() A)这两个方法是一样的,没有任何的区别 B)这两个方法不一样,load先找缓存,再找数据库

C)这两个方法不一样,get先找缓存,再找数据库 D)以上说法都不对 注:load()和get()都是先找缓存,再找数据库。 不同点是在检索时: load()是延迟检索,先返回代理对象,访问对象时在发出sql命令Get()是立即检索,直接发出sql命令,返回对象 6、在Hibernate中修改对象的说话错误的是() A)只能利用update方法来做修改 B)可以利用saveOrUpdate方法来做修改 C)可以利用HQL语句来做修改 D)不能利用HQL语句来修改 7、下面关于Hibernate中Transaction的使用说法正确的是()(选择两项) A)Transaction是可有可无的 B)Transaction在做查询的时候是可有可无的 C)Transaction在做修改的时候是可有可无的 D)Transaction在做修改的时候是必须的 8、使用Hibernate技术实现数据持久化时,下面()内容不在 Hibernate配置文件中配置(选择一项) A) 数据库连接信息 B) 数据库类型(dialect) C) show_sql参数 D) 数据库表和实体的映射信息

hibernate练习题

1.下面创建Criteria对象的语句中正确的是 单选 A、Criteria c = query.createCriteria(); B、Criteria c = query.addCriteria(); C、Criteria c = session.createCriteria(); D、Criteria c = session.createCriteria(User.class); 2. Query对象执行查询结论正确的是 多选 A、list()方法返回结果为List对象,数据总量为0到多条 B、uniqueResut()方法返回结果为对象或对象数组,数据总量为0到1条数据 C、HQL:select userName from UserModel可以使用list()方法进行查询结果的获取 D、HQL:select userName from UserModel可以使用uniqueResut()方法进行查询结果的获取 3Hibernate实体对象制作规范不包含下列哪条规则 单选 A、声明无参公共的构造方法 B、提供用于作为OID的标识属性 C、为所有属性提供getter与setter方法 D、声明为最终类(final修饰) 4在HQL语句的参数查询中,执行以下代码,下列选项能够为参数正确赋值的操作是Query query = s.createQuery("from Customer o where https://www.doczj.com/doc/653054477.html,=?"); 单选 A、query.setParameter(1, "Tom"); B、query.setParameter(0, "Tom"); C、query.setString(0,Tom); D、query.setInteger (0,Tom); 5有关Hibernate瞬时对象状态说法错误的是 多选 A、瞬时状态的对象具有OID,与Session对象关联 B、瞬时状态的对象具有OID,不与Session对象关联 C、瞬时状态的对象不具有OID,与Session对象关联 D、瞬时状态的对象不具有OID,不与Session对象关联 6有关QBC查询短语,下列说法正确的 多选 A、Restrictions.between表示范围比对 B、Restrictions.eq表示等比对 C、Restrictions.le表示小于等于比对 D、Restrictions.ge表示大于等于比对 7下列操作对一级缓存的影响描述错误的是

matlab常用对象操作

、常用对象操作:除了一般windows窗口的常用功能键外。 1、!dir 可以查看当前工作目录的文件。!dir& 可以在dos状态下查看。 2、who 可以查看当前工作空间变量名, whos 可以查看变量名细节。 3、功能键: 功能键快捷键说明 方向上键Ctrl+P 返回前一行输入 方向下键Ctrl+N 返回下一行输入 方向左键Ctrl+B 光标向后移一个字符 方向右键Ctrl+F 光标向前移一个字符 Ctrl+方向右键 Ctrl+R 光标向右移一个字符 Ctrl+方向左键 Ctrl+L 光标向左移一个字符 home Ctrl+A 光标移到行首 End Ctrl+E 光标移到行尾 Esc Ctrl+U 清除一行 Del Ctrl+D 清除光标所在的字符 Backspace Ctrl+H 删除光标前一个字符 Ctrl+K 删除到行尾 Ctrl+C 中断正在执行的命令 4、clc可以命令窗口显示的内容,但并不清除工作空间。 二、函数及运算 1、运算符: +:加,-:减, *:乘, /:除,\:左除 ^:幂,':复数的共轭转置,():制定运算顺序。 2、常用函数表: sin( ) 正弦(变量为弧度) Cot( ) 余切(变量为弧度) sind( ) 正弦(变量为度数) Cotd( ) 余切(变量为度数) asin( ) 反正弦(返回弧度) acot( ) 反余切(返回弧度) Asind( ) 反正弦(返回度数) acotd( ) 反余切(返回度数) cos( ) 余弦(变量为弧度) exp( ) 指数 cosd( ) 余弦(变量为度数) log( ) 对数 acos( ) 余正弦(返回弧度) log10( ) 以10为底对数 acosd( ) 余正弦(返回度数) sqrt( ) 开方 tan( ) 正切(变量为弧度) realsqrt( ) 返回非负根 tand( ) 正切(变量为度数) abs( ) 取绝对值

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.域对象间的关系 关联: 类间的引用关系。以属性定义的方式表现。

用MyEclipse如何自动生成hibernate的.hbm.xml文件

用MyEclipse如何自动生成hibernate的.hbm.xml文件(2010-07-29 17:36:01) 今天在网上看到很多人都不知道怎么用MyEclipse自动生成hibernate的.hbm.xml文件。我甚至看到有位兄弟竟然自己写出那个格式的文件来。首先我不得不佩服那位兄弟的记忆力。可是我这边有更直接的方法希望能对那些入门级别的人一点帮助! 在hibernate中,每个数据表对应的其实是一个实体类,每个实体类有一个对应的hbm.xml 配置文件和你匹配,myeclipse中其实有个MyEclipse Database Explorer视图,它提供了myeclipse与数据库直接连接的内置窗口,并且通过此窗口可以生成hibernate的mapping文件。 1.在项目上点击右键选择MyEclipse选项,为应用增加Hibernate特性. 2.在出现的配置窗口中,选中“Add Hibernate 2.1 libraries to project?”,然后设定存放Hibernate 库文件的目录为:/WEB-INF/lib 目录,默认会选择创建一个新的Hibernate配置文件hibernate.cfg.xml。 3.点击下一步,进入Hibernate数据库连接配置界面,在Connection Profile选项中直接选择在MyEclipse Database Explorer中配置的vipdata选项,然后就会自动生成其他的配置,可以选择“Copy JDBC Driver and add to classpath”,这样就会将JDBC驱动拷贝到WEB-INF/lib目录中。: 4.点击下一步,来创建Hibernate的SessionFactory类,这是一个简单的集中管理Hibernate 会话的工厂类,填写类的全名称。 5.点击完成,然后MyEclipse就会将Hibernate相关的jar包拷贝到lib目录下,同时会生成Hibernate的配置文件:hibernate.cfg.xml,和SessionFactory类。 现在要利用MyEclipse Database Explorer视图中的工具来生成Hibernate的映射文件。切换到MyEclipse Database Explorer视图,在表vipdata上点击右键,选择Create Hibernate Mapping.

Hibernate(V)——一对多与多对多关联关系映射(xml与注解)总结

Hibernate(6)——一对多和多对多关联关系映射(xml和注解)总结 涉及的知识点总结如下: ?One to Many 映射关系 o多对一单向外键关联(XML/Annotation) o一对多单向外键关联(XML/Annotation) o懒加载和积极加载 o一对多双向外键关联(XML/Annotation) ?Many to Many 映射关系 o多对多单向外键关联(XML/Annotation) o多对多双向外键关联(XML/Annotation) o set的inverse元素详解 ?问题小结 ?关联关系的优缺点 多对一单向外键关联关系 注意多对一关联是多方持有一方的引用。看一个例子,去淘宝购物,那么一个淘宝用户可以对应多个购物订单,如图所示: 多的一方是Orders,持有一方的引用,也就是Users,而在Users中无需作任何定义,从订单到用户的关系是单向多对一关联。对应数据库就是: 还有比如说学生和班级的关系,多个学生可以属于同一个班级,这就是从学生到班级也是典型的单向多对一关系,看代码实现: 基于注解的多对一单向外键关联: 单向多对一关联中,多方需要持有一方的引用,那么多方(学生类)需要额外配置,需要对持有的一方引用使用注解@ManyToOne (cascade={CascadeType.ALL}, fetch=FetchType.EAGER),设置为级联操作和饥渴的抓取策略,@JoinColumn(name="cid"),而一方(教室类)无需做任何多方的定义。 注意;多方必须保留一个不带参数的构造器! import ; import ; import ; //班级类,在多对一关系中属于一的方,不持有其他多余的配置,反而是被多方持有

使用Hibernate开发租房系统+(笔记)

第一章Hibernate入门 本章技能目标 理解持久化的概念 理解ORM的概念 了解Hibernate的基本原理 学会编写实体映射文件 学会使用hibernate完成数据增删改操作 学会在项目中使用Hibernate 本章单词 Hibernate:对象关系映射框架。Object:对象。Relational:关系模型。Mapping:映射。Get:得到。Load:加载。Transient:瞬时。Persistent:持久化。Detached:分离 本章简介 对象——关系映射。框架:hibernate Hibernate 的优势 是一个优秀的Java持久化层解决方案,主流的对象——关系映射工具。简化了JDBC繁琐的编码。Hibernate将数据库的连接信息都存放在配置文件中。 持久化与ORM ORM(Object Relational Mapping ,对象关系映射). 当程序退出后,这些数据就不复存在,所以,我们称这些数据的状态为瞬时的(Transient) 有些数据,在程序退出后,还以文件等形式保存在存储设备中,我们称这些数据的状态是持久的(Persistent) 在编写程序的时候,以面向对象的方式处理数据,保存数据的时候,却以关系型数据库的方式存储,所以,客观上我们需要一宗能在两者间进行转换的机制,这样的机制就是ORM(对象关系映射) 准备Hibernate 1.下载需要的jar包 2.部署jar包 3.创建Hibernate配置文件 4.创建实体类和实体映射文件 Hibernate.cfg.xml配置内容: Dialect:参数:用于配置Hibernate使用的不同数据库类型。 Connection.dirver_class参数:表示数据库驱动。 https://www.doczj.com/doc/653054477.html,ername参数:表示数据库用户名。 Connection.password参数:表示数据库用户秘密。 Connection.url参数:表示数据库URL。 Current_session_context_class参数:指定当前Session范围和上下文。 Show_sql参数:参数为true,则程序运行时在控制台输出SQL语句。 配置好Hibernate的配置文件,就要实现数据库表和实体对象之间的映射,映射信息在映射文件中。 一个实体类到数据库表??(表名)映射的配置,???.hbm.xml其中各元素的含义如下: Class元素:定义一个实体类的映射信息 常用属性如下: Name表示对象实体类的全限定名。Table表示对应的数据库表名。 Id元素:定义该属性到数据库表主键字段的映射。 常用属性如下: Name表示实体类属性的名字。Type表示实体类属性的类型。Column表示数据库表字段的名字,也可在子元素column 指定。 Generator元素:id元素的子元素用于指定主键的生成策略。 常用属性及子元素如下: Class用来指定具体主键生成策略。Param元素用来传递参数。 常用主键的生成策略如下:increment,identity,native。。。。 Property元素:定义实体类中属性和数据库中表的字段的对应关系。 常用属性如下: Name表示实体类属性的名字。Type表示实体类属性的类型。Column表示数据库表字段的名字,也可在子元素column

如何根据hibernate的实体类和实体类配置文件生成数据库的表

网络地址: 主题:如何根据hibernate的实体类和实体类配置文件生成数据库的表 内容部分 [c-sharp]view plaincopyprint? 1. 4. 5. 6. jdbc:mysql://12 7.0.0.1/lianxi 7. com.mysql.jdbc.Driver 8. root 9. root 10. org.hibernate.dialect.MySQLDialect 11. true 12. update 13. 14. 15. 16. 17. 18. 19.

通过hibernate操作oracle的clob类型数据

1问题描述 当我们需要操作大于4000字节的数据(字段)时,我们就需要用到oracle的CLOB数据类型。在对其进行操作时主要有以下三种方案:采用传统的jbdc方式、把clob以string方式处理和直接使用CLOB类型三种方案,下面分别作简要介绍。 2对CLOB数据类型的操作 2.1 方式一传统的jdbc方式 写入Blob/Clob字段和写入其它类型字段的方式非常不同,因为Blob/Clob自身有一个cursor,必须使用cursor对Blob/Club进行操作,因而在写入Blob/Club之前,必须获得cursor才能进行写入,那就需要先插入一个empty的Blob/Club,这将创建一个Blob/Club的cursor,然后再把这个empty的Blob/Club的cursor用select查询出来,这样通过两步操作,就获得了Blob/Club的cursor,可以真正的写入Blob/Club数据了。这种方式比较麻烦,读写都要增加不少工作量。有关此方法的具体实现代码请参照示例一。 2.2 方式二把CLOB以String方式处理 此方法主要是通过继承net.sf.hibernate.type.ImmutableType类或https://www.doczj.com/doc/653054477.html,erType类来创建一个新的类如:StringClobType,然后在相应的配置文件里面,把该字段映射为StringClobType类型,即可正常操作。此方法的优点主要体现在具体实现操作的代码较为简单,但在第一步的映射问题上,较难理解。有关此方法的具体实现代码请参照示例二。 2.3 方式三直接使用CLOB类型 第三种方法是直接使用clob类型,它主要是在实体中增加一个clobString字段,通过对该字段的读写,在DAOImpl层进行特殊处理后,转换为真正的clob类型,从而实现clob类型字段的CRUD操作。此方法主要优点体现在配置文件的映射类型上,只需要像映射其它基本类型一样,直接写上type="clob" 就OK了。这对初次遇到这种问题的人来说入门相对容易。 2.3.1使用方法 下面以文章(只考虑文章标题和文章内容)为例介绍其使用方法。

Application对象基本操作应用示例

Application对象基本操作应用示例 Application对象代表整个Microsoft Excel应用程序,带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。 示例01-01:体验开/关屏幕更新(ScreenUpdating属性) Sub 关闭屏幕更新() MsgBox "顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" Application.ScreenUpdating = True Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select MsgBox "下面与前面执行的程序代码相同,但关闭屏幕更新功能" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" & Chr(10) & "关屏屏幕更新功能" Application.ScreenUpdating = False Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select Application.ScreenUpdating = True End Sub 示例说明:ScreenUpdating属性用来控制屏幕更新。当运行一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CPU的处理时间,从而降低程序的运行速度,而关闭该属性则可显著提高程序运行速度。 示例01-02:使用状态栏(StatusBar属性) Sub testStatusBar() Application.DisplayStatusBar = True '开启状态栏显示 '赋值状态栏显示的文本 Application.StatusBar = "https://www.doczj.com/doc/653054477.html," End Sub 示例说明:StatusBar属性用来指定显示在状态栏上的信息。若不想再显示状态栏文本,可使用Applicat ion.StatusBar = False语句关闭状态栏显示,也可以在程序开始将原先的状态栏设置存储,如使用语句o ldStatusBar = Application.DisplayStatusBar将状态栏原来的信息存储在变量oldStatusBar,在程序运行完成或退出时,将变量重新赋值给状态栏,如使用语句Application.DisplayStatusBar = oldStatusBa r,以恢复状态栏原状。

Hibernate操作Clob类型完整版!

Hibernate操作Clob类型完整版! 最近,使用Hibernate操作Clob。上网看了不少资料,感觉五花八门,实现起来的方法都各不相同。 有的是Hibernate2.0上的。有的是加入了spring的支持,把clob当成string做处理(的确很好,但是不适合新手)........ 而且,某些代码根本都执行不了~浪费我们的时间,55555555。 于是,法老参考了一些官网的方法加以修改,干脆重新写一个完整元操作版本。 包含:insert,update,delete,select 四大基本方法! 供大家参考! ------------------------- ------------------ 测试环境介绍: WINDWOS XP SP2;Eclipse 3.2;JDK 1.4.2 Hibernate-Version: 3.0.5 ;oracle 9i ; ===================== 重点说明: 1。配置文件hbm.xml里把clob的type="clob" 片段如下

<property name="bsznContent" type="clob"> <column name="BSZN_CONTENT" not-null="true" /> </property> 2。实体bean中,导入java.sql.Clob包(注意不是oracle.sql.CLOB 个人习惯用血统纯点的.这里鄙视一下oracle。嘿嘿) 在该字段对应的实体文件里面,增加以下两个变量及其相应的get/set方法 import java.sql.Clob; ... private Clob bsznContent; private String bsznContentString; ... public Clob getBsznContent() { return this.bsznContent; } public void setBsznContent(Clob bsznContent) { this.bsznContent = bsznContent; } public String getBsznContentString() {

hibernate关系映射注解配置

1. Hibernate Annotation关系映射有下面几种类型: 1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要,有需要看下文档即可) 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。 因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了 4)多对一关联映射(单向) 5)一对多关联映射(单向) 6)一对多关联映射(双向) 7)多对多关联映射(单向) 8)多对多关联映射(双向) 2.介绍各种映射用法 1)一对一外键关联映射(单向)Husband ---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} … } public class Wife{ } 一对一外键关联,使用@OneToOne,并设置了级联操作 @JoinColum设置了外键的名称为wife_id(数据库字段名),如果不设置,则默认为另一类的属性名+ _id 外键的值是唯一的(unique),不可重复,与另一类的主键一致 2)一对一外键关联映射(双向)Husband <---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} ... } public class Wife{ private Husband husband; @OneToOne(mappedBy="wife",cascade=CascadeType.ALL) public Husband getHusband(){…} ... } 一对一双向关联关系,使用@OneToOne 注意:需要加上mappedBy="wife",如果不加上的话,Wife也会生成一个外键(husband_id)。mappedby="wife"需要指向与他关联对象的一个属性(即Husband类里面的wife属性),这里的会在Husband表里面生成个外键wife_id字段,而Wife表里则不会生成。这里Husband作为维护端即主

5.3 基本操作

一、实体对象 包括基本图形、图块、标注等实体对象的创建,及图形平移、缩放、复制、删除等操作编辑以及点、线、面、体等图形的几何关系运算。 1、创建对象P310 对象的创建主要通过实体的构造函数。 常用到的命名空间: Autodesk.AutoCAD.ApplicationServices Autodesk.AutoCAD.DatabaseServices Autodesk.AutoCAD.Geometry 2、编辑对象P323 图形对象通用的编辑方法包括及平移、缩放、复制、旋转、镜像、阵列等。 常用到的命名空间: System.Collections.Generic; Autodesk.AutoCAD.DatabaseServices; Autodesk.AutoCAD.Geometry; 2.1 Move P323 2.2 CopyTo P323 2.3 Rotate P324 2.4 Scale P324 2.5 Mirror P324 2.6 Offset P325 2.7 ArrayRectang ArrayPolar P325 2.8 SetDynamicValue 设置动态块属性P326 2.9 MoveTop 改变对象绘图次序P327 2.10 WBClone 写块克隆P327

3、几何关系P328 介绍常用的基本几何运算的方法。 常用到的命名空间: System.Collections.Generic; Autodesk.AutoCAD.DatabaseServices; Autodesk.AutoCAD.Geometry; (3.1)角度与弧度转换P328 AngToRad RadToAng (3.2)夹角 P328 两点组成的线段与X轴之间夹角 两直线间夹角 (3.3)距离 P329 点到曲线距离 直线距离 (3.4)相对点 P329 获取与给定点指定角度和距离的点 获取与给定点相对距离的点 (3.5)中点 P330 计算两点中点 计算线段中点 (3.6)重合P330 判断点是否重合 判断线段是否重合 获取两条线段重合部分 (3.7)相交P331 给定延伸方式求曲线交点 判断点是否在曲线上

利用轻量对象关系映射技术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、

第七讲 MAYA基本操作

第二讲MAY A基本操作 教学目的: 教学重点: 教学难点: 教学准备: 课时安排: 教学过程: 1、课前复习 (1)MAY A的菜单栏有什么特点? (2)MAY A有哪几种建模方式? (3)MAY A中,如何将某一视图最大化?如何又将之还原? (4)MAY A中,如何在一个视图中插入一张背景图片?如何设置一背景图片的显示属性?(5)MAY A中,如何建立一个图层?如何将一个对象放入该图层内?如何删除一个图层?如何清空一个图层?如何将图层对象了隐藏、锁定? (6)显示一个对象的热键盒的操作方法是什么? 2、新建、保存、打开与合并MAY A场景 (1)新建 方法1:File(文件)菜单下的New Scene命令可以新建一个场景; 方法2:通过工具栏中的“Create a new scene(新建一个新场景)”按钮来创建一个新场景;方法3:快捷键Ctrl+N; 在新建一个新场景之前,若要设置场景是对象的长度单位、角度单位及动画播放的起始帧或结束帧等,可单击File(文件)菜单下的New Scene命令后的属性设置小方块,弹出如下对话框,其中,Linear项是用来设置单位的,系统默认是centimeter(厘米),角度单位默认为度,帧数设置是每秒24帧,播放/动画起始帧是1,播放/动画结束帧是24。 (2)保存 方法1:File(文件)菜单下的Save Scene命令; 方法2:通过工具栏中的“Save the current scene(保存场景)”按钮来创建一个新场景;方法3:快捷键Ctrl+S; (3)打开 方法1:File(文件)菜单下的Open Scene命令; 方法2:通过工具栏中的“Open a scene(打开一个场景)”按钮来打开一个场景; 方法3:快捷键Ctrl+O;

Hibernate映射解决问题

Hibernate映射解决问题 做Hibernate映射已经做了五天了,期间遇到了不少错误,有的时候错误很细小,很难发现.现在就来总结一下,常见的错误,有的也是在网上搜了看到的! 第一种问题:Could not execute JDBC batch update 网上说有两种可能: 1.因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了 2.估计是你的列名里面有关键字的原因吧,命名列的时候不要单独使用date,ID...这种关键字 但是,我觉得他写得不完全啦!我遇到的就不是两种原因,而是List映射时,对应表的索引项没有设成主键,所以就出错了.虽然找了蛮长时间的.同样, 它也会出现Duplicate entry '1' for key 1的错误啦! 第二种问题(归纳下): 1.Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence. 如果出现这行错误说明你的XML配置文件有不规范的字符,检查下。 2.net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml 如果出现这行错误说明你的hibernate的XML配置文件有错 3.net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found 如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,一般跟同名的java持久化类放在一起,也就是跟Hello_Bean.class类文件一起。4.net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean 如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.Java类里的getXXX 或setXXX方法不一致。 5.net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver:没有找到数据库驱动程序 6.The database return no natively generate indentity value。主键没有添加增量 7.net.sf.hibernate.PropertyValueException:not-null property references a null or transient value:com.pack.Rordercontent. 异常产生原因:Rordercontent对象的非空属性Rordertable引用了一个临时对象。 8.net.sf.hibernate.TransientobjectException:objiect references an unsaved transient instance –save the transient instance before flushing: com.pack.Rordertable 持久化对象的某个属性引用了一个临时对象Rordertable https://www.doczj.com/doc/653054477.html,.sf.hibernate.MappingException

相关主题
文本预览
相关文档 最新文档