admin 管理员组文章数量: 1086019
2024年3月28日发(作者:string字符串转map)
数据库和信息管理
…●●…。……●●…………………………………………………●-…-●●…‘……
DATABASE AND INFORMATION MANAGEMENT
…‘…●……………………………………●●
Hibemate和JFace数据绑定框架的整合应用
郑哲
f宁波城市职业技术学院信息学院,宁波315100)
摘要:Hibemate作为最受瞩目的数据库访问技术,提供了一种很好的数据持久层解决方案,正如Hibernate实现
了业务层和数据库层之间的数据流转换,JFace的数据绑定框架实现了基于UI组件的数据表现层与业务层的数据实
现自动同步。本文将整合利用这两者的优势,让用户轻松地实现数据库、域对象到GUI组件三层体系结构的数据联
动,大大提高数据库应用程序的开发效率。
关键词:Jface;Hibernate;Databinding;Java;Eclipse3.3
Hibernate and JFace Databinding integrate印plication
ZHENG Zhe
(Information faculty,Ningbo City College of Vocational Technology,Ningbo 315100)
【Abstract】As the most attractive technology of database a ̄cess,Hibenarte offers a good resolution fo data persistence.Just
as Hibernate helps automate the data flow between the business tier and the database tier,JFace Data Binding helps auto—
mate the data flow betweeen the business tier and the presentation tier.This paper will combine the two technologies,and
show you how it impove your efifciency in Java Application development。
【Key Words】JFace;Hibernate;DataBinding;Java;Eclipse 3.3
1 引言
基于Java图形用户界面的数据库访问应用程序的大量开
发时间都用于将数据从数据库中提取出来,并将提取的数据
放置在合适的域对象中,将需要显示的域对象数据进行筛选
和整理后,简单地显示在GUI组件上;然后当用户对GUI组
件数据进行交互操作时,将GUI组件修改的结果返回给域对
象,进而再在必要的时候将修改过的域对象数据保存到数据
2.1.2优点
(1)轻量级封装:Hibernate对JDBC的轻量级封装,内存
消耗少运行效率高。
(2)开发效率高:目前的Edi ̄e、JBuilder等Java主流
开发平台对Hibernate有很好的支持,可以提高开发效率
(3)开源和免费:可以免费使用,并可以研究、学习修
改源代码进行功能定制,开源社区活跃,有稳定的质量保障。
(4)分布式、可扩展:提供了集群、负载均衡的支持,
用户可以扩展自己的功能。
2.1.3 Hibernate工作流程
库。这样的工作繁琐而且重复。近年来,利用数据绑定框架
实现自动同步域对象数据和GUI组件数据成为了研究的新课
题。数据绑定框架的实现大大简化了基于图形界面的数据库
访问应用程序开发。同时配合业已成熟的Hibernate数据持久
化应用框架,将可以极大地提高Java数据库应用程序的开发
效率。
首先读取用户事先编写好的XML映射文件,该映射文件
起到Java对象和用户数据表之间的对应关系。
然后通过其独特的session对象管理数据库与Java对象之
间的转换,用户通过Hibernate提供的特有HQL语句(一种类
Eclipse在3.3版以后提供了正式的jface databinding API,
专门用于SWT和JFace的数据绑定时使用。
似于SQL,但更为简单有效的语言)来操作数据库。
2.2 JI1ace Data Binding
2 理论基础
2.1 Hibernate
传统的面向对象架构使用的是MVC模式来持续响应用户
接口(uI)到模型。这种架构如图1所示。
《《Listens
2.1.1简介
Hibernate是一个开源的对象关系映射框架,负责Java对
象和关系数据之间的映射,是Java应用和关系数据库之间的
桥梁。Hibernate对JDBC进行了轻量级的对象封装,其内部封
装了通过JDBC访问数据库的操作,并向上层应用提供了面向
对象的数据访问API。Hibernate可以应用在任何使用JDBC的
场合,既可以在Java的客户端程序中使用,也可以在serve卜
le ̄SP等Web应用程序中使用。用户无需编写繁琐的SQL语
句,Hibernate会自动生成,也不用考虑如何从数据库中取出
和保存数据,Hibernate会为你代劳。总之,使得我们可以以
面向对象的方式访问数据库。
一
《
Controller
图1MVC模式
其工作原理如下:
48—
DATABAsE AND INF0RMAT10N MANAGEMENrI’
……………………●‘………………………………………………●………●……………●……
数据库和信息管理
…………………………●
(1)视图监听模型的改变,并且重绘自身以响应这种
改变。
(2)控制器监听视图改变的事件。
(3)当控制器监听到一个事件需要导致某种改变,它将
负责操作模型,模型改变了,视图也因此自动刷新,因为视
图在监听着模型的改变(如图1所示)。这种模式导致了一系
列问题如下:
1)视图获得模型的引用,以获得模型信息。
2)控制器不仅要知道模型,而且还要了解视图。
因此,基于以上模型实现的显示层和业务模型层之间的
数据传递和自动同步程序,显得复杂而繁琐。
使用数据绑定是一个非常有效的方法,比如它可以将文
本框小部件和对象的一个属性绑定起来,将一个选项组和一
个 ava.util.List或者是一个java.util.Set绑定起来等等。其实现
的架构如图2所示。
VJew Controller
图2数据绑定架构
3 整合模型
使用Hibernate框架和JFace的数据绑定框架,可以快速
地开发基于SWT,JFace的Java应用程序。其整合模型如图3
所示。其处理过程是,首先使用Hibernate将数据从数据库表
通过XML映射文件映射为相应的实体对象,这些实体Bean
对象成为了JFace数据绑定中的模型对象,利用绑定框架将它
需要显示的属性和指定的视图组件绑定在一起,这样就可以
实现模型对象和视图数据的自动同步,当需要保存数据时,
只需将最终的模型对象数据通过Hibernate持久化对象写入到
相对应的数据表中即可,方便而快捷。
图3 Hibernate、JFace数据绑定框架工作流程
4 应用示例
示例程序将创建一个文本框(用于显示学生姓名)和一
个按钮(用于保存用户修改),程序运行时利用Hibernate从数
据库中映射学生表到学生对象模型,该对象模型就作为示例
的视图模型,利用iface数据绑定架构将要显示的属性显示在
应用程序的文本框中。因为使用了数据绑定功能,用户在界
面上所做的任何修改数据都将自动保存在视图模型中,最终
用户可以通过保存按钮将这些修改后的模型数据一次性地通
过Hibenrate写入到数据库中的映射表里,如图4所示。
(1)在Apache Derby数据库中创建学生表Student
CREATE TABLE STUDENT f
图4示例效果图
ID INT GENERATED ALWAYS AS IDENTITY(START
WITH l,INCREMENT BY 1),
USERNAME VARCHAR(8)NOTNULL
PRIMARY KEY(ID));
(2)配置Hibernate,映射数据表:限于篇幅,请参考相
关资料进行配置。经过Hibernate映射以后,得到相应的实体
类,如图5所示。
已№
廖model
鼹mode1.base
——一
国hibernate cfg,xml
螫!og4j.properties
馥Student。hbm。xml
图5Hibernate映射数据表
(3)使用Jface DataBinding
要JFace DataBinding需要用到Eclipse3.3自带的如下插件
包,将这些包导入到项目中。
1)org.eclipse.jface.databinding_1.1.1.M20070910—0800b.jar
2)org.eclipse.core.databinding
_
1.0.1.M20070822—0800.jar
3) org.eclipse.core.databinding.beans 1.0.1.M20070910—
0800bjar
(4)编写DatabindingDemoOava
public class DataBindingDemo{
public static void main(String[】args) {
Display display=new Display();
final ViewModel viewModel=new ViewModel 0:
Realm.runWithDefault( SWTObservables.getRealm
(display),
new Runnable 0 {
public void mn() {
ifnal SheU shell=new View(viewMode1).createShell 0;
Display display=Display.getCurrent 0;
while(!shel1.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep 0;
}
}
}
});
}
}
(5)编写ViewMode1.java
public class ViewModel{
,/需要绑定的模型
——
49——
数据库和信息管理
…●●●●●………-●●●●●…●●●●●……●…●●…●……●●……●●●●●●●●…………………
DATABASE AND INFORMATION MANAGEMENT
…●…●●●●●●●●●●●●●●●●-●●●●●●●-……………●……
private Student person;
public ViewModel 0 {
person=initPerson 0:
}
public Student getPerson 0 {
return person;
)
private Student initPerson 0 {
private Student initPerson 0 {
Student s=null;
try{
SessionFactory sf=new Configuration().configure
0.buildSessionFactory 0;
Session session=sf.openSession 0:
Transaction tx:session.beginTransaction 0:
Stirng hql=’’from Student where id=:idNum’’:
Query query=session.createQuery(hq1);
query.setlnteger C idNum”,1);
tx.commit();
List results query.1ist 0:
if(results.size 0>O) {
S=(Student)results.get(0);
}
session.close 0;
}catch(HibernateException e) {
System.err.println Hibernate Exception:”+e.get—
StackTrace());
}finally{
}
retum S;
}
public void savePerson 0 {
try{
SessionFactory sf=new Configuration().configure
0.buildSessionFactory 0;
Session session=sf.openSession 0:
Transaction tx=session.beginTransaction 0:
session.update(person):
tx.commit 0;
session.close 0;
MessageDialog.openlnformation(null,”提示”,”
成功保存到数据库”);
}catch(HibernateException e) {
System.err.println(”Hibernate Exception:”-I-e.get-
StackTrace());
1 finally{
}
}
}
(6)创建View.java
public class View{
private ViewModel viewModel;
private Text name;
private Button saveButton;
public View(ViewModel viewMode1) {
mis.viewModel=viewModel;
1
public Shell createShell 0 f
一
5O—
Display display=Display.getDefault 0:
Shell shell=new Shell(display);
shel1.setLayout(new RowLayout(SWT.VER—
TICAL));
name=new Text(shell,SWT.BORDER);
SaveButton=new Button(shell,SWT.None);
saveButton.setText C保存修改”);
saveButton.addSelectionListener( new Selec-
tionAdapter 0 {
public void widgetSelected(SelectionEvent e)
{
viewMode1.savePerson 0;
}
});
/,数据绑定:将学生姓名字段和文本框name绑定起来
,/绑定时这里给定需要绑定的swT组件是Text,绑定的值
,,是实体Bean的name字段
DataBindingContext bindingContext=new DataBindingCon—
text 0;
Student person=viewMode1.getPerson 0:
bindingContext.bindValue(SWTObservables.observeText
(name,SWT.Modify),BeansObservables.observeValue(person,
”name”),
null,nul1);
shel1.pack 0;
shel1.open();
return shell;
)
)
5 总结
通过这个简单的示例可以大致了解JFace数据绑定和Hi—
bernate整合操作的开发流程,也能深刻体会该框架带给开发
效率上的显著提高。此外,使用本框架的好处还在于数据库
层、业务层、数据表现层层次更加清晰,开发人员将可以完
全从繁杂的数据库操作和GUI组件操作中解放出来,把精力
更多地集中在业务逻辑的开发上。同时在测试swT、Swing组
件状态时我们经常碰到无法访问或者很难访问GUI组件状态
的情况,现在有了数据绑定,我们可以通过把组件状态绑定
到模型的字段里,只需测试字段的值,而无需访问GUI组件,
极大地方便了对GUI组件的测试。
参考文献
【11陈冈.Ecl]ipse RCP应用系统开发方法与实战【M】.电子工
业出版社,2007.
[2 Scot2】t Delap.了解Eclipse中的JFace数据绑定.第2部分:
绑定的基础知识.
『3陈刚.Ecl31ipse从入门到精通(第2版)【M】.清华大学出版
社,2007.
【4】Scott Delap.Understanding JFace data binding in Eclipse,Part
1:The pros and cons ofdata.
作者简介
郑哲,男(1980一),浙江宁波,硕士在读,研究方向:E—
clipseRCP,Eclipse插件开发,Flex。
版权声明:本文标题:Hibernate和JFace数据绑定框架的整合应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1711627684a602529.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论