帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
简析J2EE应用程序数据库类设计模式
作者:佚名 发布时间:2005-04-02 来源:不详
 
    本文主要介绍一种
在事务处理方面的一些考虑
数据库相关类的设计模式。并介

绍在J2EE框架中的具体实现,以及


    一、设计模式简介                                                         

    在开发J2EE应用程
的产品目录,或一个网站的
序时,通常是要找出应用程序中
用户信息,我们会将这些信息放
涉及到的各种信息,比如一个公司
在数据库里。

    在通常的设计中,
把各种信息用不同的表来存
分别表示书和出版社。
我们要分析这些数据的属性和关
储。比如,要开发一个图书信息

系,然后进行数据库的逻辑设计,
查询系统。可以创建下面两个表来


    table Book (ID, Name, ISBN,
Author, PublisherID, Price, Volume)

    table Publisher (ID, Name, T
elephone, Address, Postcode)

    表Book包含了ID,
,社名,电话,地址,邮编
书名,书号,作者,出版社ID,
。这两个表通过出版社ID相关。
价格,页数。表Publisher包含ID


    下面我们来介绍一种数据库相关类的设计的模式。                             

    数据库相关类可以分成实体类(
Entity Class)和会话类(Session Class)。

    实体类对应于一个
而且,该类中的属性和记录
表的记录的封装,也就是该类的
中的字段是一一对应的。
一个实例对应于表中的一个记录。


    会话类对应于对一
找记录和更新一条记录。
个表中的所有记录的操作。比如

增加一条记录,删除一条记录,查


    通过使用这种设计
他设计模式。
模式,使程序更加模块化,便于

开发和维护。当然,也可以使用其




  二、程序实现                                                                 

    在具体实现上面的这种模式时,
看到上面的描述模式后,我们很容易就发
EJB)。
往往根据具体的应用程序来选用不同的技术来实现。
现,可以用EJB来实现(EJB分两种,实体EJB和会话


    我们知道,EJB提出来的目的是
用程序是一个分布式的应用系统,那么毫
同时,通过使用EJB容器的一些高级特性
样一来,开发人员就不必关心一些底层技
在怎样实现业务逻辑上。但是我们应该注
EJB有可能大大降低系统的性能。因为,E
用于提供一种分布式组件系统的开发。如果我们的应
无疑问,使用EJB来实现能大大减轻编程的工作量。
,可以使应用程序更加可靠,扩展性也大大加强。这
术,比如事务处理,安全等各个方面,而是把重点放
意,如果开发的应用不是分布式的情况下,那么采用
JB调用的开销很大。

    本文将探讨在不利用EJB技术的情况下如何来实现上面介绍的这个模式。       

    下面以开发图书信息查询系统为例。                                         

    1.实体类                                                               

    如前面讲到的,实
表的每个字段一一对应。必
程序中对实例的操作并不马
体类的每个实例与表中一个记录
须注意的是,实体类的实例是每
上反应到数据库的记录中。
对应。这样,实体类的属性应该和
个记录在内存中的对应,因此,在


    在该类中,只是对
getXX()方法。
数据的包装,因此,该类仅需要

一些基本的方法,即setXX()和


    下面是一个实体类,是对Book表的封装。                                 

    class Book{                                                   

     protected int  ID;                                   

     protected String Name;                           

     protected String ISBN;                           

     protected String Author;                       

     protected int  PublisherID;                 

     protected double Price;                         

     protected int  Volume;                           

     public void setID(int iID);                 

     public int  getID();                               

     public void setName(String sName);   

     public String getName();                       

     public void setISBN(String sISBN);   

     public String getISBN();                       

     public void setAuthor(Strin
g sAuthor);

     public String getAuthor();                   


     public void set
PublisherID(int iID);

     public int  getPublisherID();             


     public void set
Price(double dPrice);

     public double getPrice();                     

     public void setVolume(int iVolume);

     public int  getVolume();                       

     public Book(int iID, String
double dPrice, int iVolume);
sName, String sISBN, int iPublisherID,


    };                                                                     

    同样地可以对表Publisher进行封装。                               

    2.会话类                                                               

    会话类主要是对一
录,更新一条记录和查找一
对应起来,或将实例与表中
个表进行处理。这些操作可以是
条记录。这些操作的结果是将表
的记录对应起来。
在表中创建一条记录,删除一条记
中的记录和内存中的实体类的实例


    我们可以看一下对Book表的封装。                                       

    class BookTable{                                         

     void Add(Book book);                               

     void Delete(Book book);                         

     void Update(Book book);                         

     Collection findbyID(int iID);             

     Collection findbyXXXX(XX,XX);             

     Collection findbyPulisherNa
me(String sPublisherName);

    };                                                                     

    上面的类的申明中
用于删除数据库中的某一个
于SELECT语句。
,Add()用于将内存中的一个Boo
记录。Update()用于更新表中的

k实例映射到数据库中。Delete()
一个记录。而findbyXXXX()则对应


    对于涉及到多个表
个类。另一个方法是,直接
回一个Book的集合。
操作时,可以有两种方式。一种
在BoolTable中写一个findbyPub

是象BookTable一样,专门封装一
lisherName()。这个方法设计成返


    上面只是简单的介绍了怎样实现
库操作的一致性。下面就介绍一下事务处
实体类和会话类。在具体的应用中,还要考虑到数据
理的相关内容。






    三、事务处理                                                             

    为了确保对数据操

作的完整和一致,在程序设计时

要充分考虑到事务处理方面的问题


    1.JDBC中怎样将多个SQL语句组合成一个事务。                       

    在JDBC中,打开一个连接对象Co
都被当作一个事务,即每次执行一个语句
组合成一个事务,要将auto-commit模式
nnection时,缺省是auto-commit模式,每个SQL语句
,都会自动的得到事务确认。为了能将多个SQL语句
屏蔽掉。

    在auto-commit模式屏蔽掉之后
确认。在最近一次commit()方法调用之后
,如果不调用commit()方法,SQL语句不会得到事务
的所有SQL会在方法commit()调用时得到确认。

    下面的代码是一个示范:                                                   

    con.setAutoCommit(false);                       

    PreparedStatemen
SALES=? WHERE COF_NAME L
t updateSales=con.prepareSta
IKE ?");
tement("UPDATE COFFES SET


    updateSales.setInt(1,50);                       


    updateSales.setS
tring(2,"Colombian");

    updateSales.executeUpdate();                 

    PreparedStatement updateTota
TOTAL =TOTAL+ ? WHERE COD_NAME LIKE
l=con.prepareStatement("UPDATE COFFEES SET
?");

    updateTotal.setInt(1,50);                       

    updateTotal.setString(2,"Col
ombian");

    updateTotal.executeUpdate();                 

    con.commit(0;                                               

    con.setAutoCommit(true);                         

    2.J2EE中分布式事务处理                                             

    在J2EE中,程序里
者服务)来处理分布式的事
transaction的属性来实现
可以使用JTA来调用底层的JTS(
务处理。另外,如果使用EJB,

JAVA Transaction Service 提供
可以通过在描述文件中指定


    有关分布式事务处理的具体内容,请参见J2EE规范。                        

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·简析JAVA中的XML编程  (2005-03-12)
 ·简析JAVA的XML编程  (2005-03-12)
 ·简析J2EE应用程序数据库类设计模  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统