⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.html

📁 写给JSP初级程序员的书
💻 HTML
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="description" content="Java,JDBC,EJB,Open Source,jdk,rmi">
<meta name="Keywords"
content="Java, servlets, Java servlet, Javascript, ActiveX, VRML,
        applet, applets, directory, news, jdbc, applications, 
        Java applications, Java developer, Java development, developer, 
        classes, Jars.com, Jars, intranet, Java applet, Javabeans, 
        Java products, JDK, Java development kit, java development environment, JIT,
        JavaPlan, enterprise tools, JVM, Java Virtual Machine, Java resources, 
        SUN, CGI, Perl, database, network, html,
        xml, dhtml, rating, ratings, review, jars, cgi, programming,
        software review, software rating">
<title>csdn_简析J2EE应用程序数据库类设计模式</title>
<style>
.news {   BACKGROUND: #007cd3;  font-family: "宋体"; font-size: 9pt }
.t {  font-family: "宋体"; font-size: 9pt }
.t1 { color:#007cd3;  font-family: "宋体"; font-size: 9pt }
.white { font-family: "宋体"; font-size: 9pt;color:#FFFFFF }
.red { font-family: "宋体"; font-size: 9pt;color:#FF0000 }
A:visited {color:#0000FF}
A:hover {color: #ff6666; text-decoration: none}
.text {font-size: 12px; line-height: 160%; font-family: "宋体"}
.text1 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text1:visited {color:#000000}
.text1:hover {color: #000000}
.text2 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text2:visited {color:#000000}
.text2:hover {color: #000000}
.text3 {font-size: 12px; line-height: 100%; font-family: "宋体"; text-decoration: none}
.large {font-size: 14.8px; line-height: 130%}
</style>
</head>

<body


<!--start first table -->



  <tr>
    <td WIDTH="100%" VALIGN="TOP">
      <tr>
        <td WIDTH="100%" CLASS="white"></td>
      </tr>
    <div align=center>
      <tr>
        <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>简析J2EE应用程序数据库类设计模式</td>
        <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap><p>作者:云起 </p></td>
      </tr></div>
      <tr>
        <td WIDTH="100%" bordercolor="#FFFFFF" CLASS="t" bgcolor="#F0F0F0" colspan="2">
        <br>
<span class="t">  本文主要介绍一种数据库相关类的设计模式。并介绍在J2EE框架中的具体实现,以及在事务处理方面的一些考虑。
<BR><BR>    <strong>一、设计模式简介</strong>
<BR>
  在开发J2EE应用程序时,通常是要找出应用程序中涉及到的各种信息,比如一个公司的产品目录,或一个网站的用户信息,我们会将这些信息放在数据库里。
<BR><BR>  在通常的设计中,我们要分析这些数据的属性和关系,然后进行数据库的逻辑设计,把各种信息用不同的表来存储。比如,要开发一个图书信息查询系统。可以创建下面两个表来分别表示书和出版社。
<BR><BR>  table Book (ID, Name, ISBN, Author, PublisherID, Price, Volume)
<BR><BR>  table Publisher (ID, Name, Telephone, Address, Postcode)
<BR><BR>  表Book包含了ID,书名,书号,作者,出版社ID,价格,页数。表Publisher包含ID,社名,电话,地址,邮编。这两个表通过出版社ID相关。
<BR><BR>  下面我们来介绍一种数据库相关类的设计的模式。
<BR><BR>  数据库相关类可以分成实体类(Entity Class)和会话类(Session Class)。
<BR><BR>  实体类对应于一个表的记录的封装,也就是该类的一个实例对应于表中的一个记录。而且,该类中的属性和记录中的字段是一一对应的。
<BR><BR>  会话类对应于对一个表中的所有记录的操作。比如增加一条记录,删除一条记录,查找记录和更新一条记录。
<BR><BR>  通过使用这种设计模式,使程序更加模块化,便于开发和维护。当然,也可以使用其他设计模式。
<BR><BR>    <strong>二、程序实现</strong>
<BR>
  在具体实现上面的这种模式时,往往根据具体的应用程序来选用不同的技术来实现。看到上面的描述模式后,我们很容易就发现,可以用EJB来实现(EJB分两种,实体EJB和会话EJB)。
<BR><BR>  我们知道,EJB提出来的目的是用于提供一种分布式组件系统的开发。如果我们的应用程序是一个分布式的应用系统,那么毫无疑问,使用EJB来实现能大大减轻编程的工作量。同时,通过使用EJB容器的一些高级特性,可以使应用程序更加可靠,扩展性也大大加强。这样一来,开发人员就不必关心一些底层技术,比如事务处理,安全等各个方面,而是把重点放在怎样实现业务逻辑上。但是我们应该注意,如果开发的应用不是分布式的情况下,那么采用EJB有可能大大降低系统的性能。因为,EJB调用的开销很大。
<BR><BR>  本文将探讨在不利用EJB技术的情况下如何来实现上面介绍的这个模式。
<BR><BR>  下面以开发图书信息查询系统为例。
<BR><BR>  1.实体类
<BR><BR>  如前面讲到的,实体类的每个实例与表中一个记录对应。这样,实体类的属性应该和表的每个字段一一对应。必须注意的是,实体类的实例是每个记录在内存中的对应,因此,在程序中对实例的操作并不马上反应到数据库的记录中。
<BR><BR>  在该类中,只是对数据的包装,因此,该类仅需要一些基本的方法,即setXX()和getXX()方法。
<BR><BR>  下面是一个实体类,是对Book表的封装。
<BR><BR>  class Book{
<BR><BR>    protected int  ID;
<BR><BR>    protected String Name;
<BR><BR>    protected String ISBN;
<BR><BR>    protected String Author;
<BR><BR>    protected int  PublisherID;
<BR><BR>    protected double Price;
<BR><BR>    protected int  Volume;
<BR><BR>    public void   setID(int iID);
<BR><BR>    public int  getID();
<BR><BR>    public void   setName(String sName);
<BR><BR>    public String getName();
<BR><BR>    public void   setISBN(String sISBN);
<BR><BR>    public String getISBN();
<BR><BR>    public void   setAuthor(String sAuthor);
<BR><BR>    public String getAuthor();
<BR><BR>    public void   setPublisherID(int iID);
<BR><BR>    public int  getPublisherID();
<BR><BR>    public void   setPrice(double dPrice);
<BR><BR>    public double getPrice();
<BR><BR>    public void   setVolume(int iVolume);
<BR><BR>    public int  getVolume();
<BR><BR>    public Book(int iID, String sName, String sISBN, int iPublisherID, double dPrice, int iVolume);
<BR><BR>  };
<BR><BR>  同样地可以对表Publisher进行封装。
<BR><BR>  2.会话类
<BR><BR>  会话类主要是对一个表进行处理。这些操作可以是在表中创建一条记录,删除一条记录,更新一条记录和查找一条记录。这些操作的结果是将表中的记录和内存中的实体类的实例对应起来,或将实例与表中的记录对应起来。
<BR><BR>  我们可以看一下对Book表的封装。
<BR><BR>  class BookTable{
<BR><BR>    void Add(Book book);
<BR><BR>    void Delete(Book book);
<BR><BR>    void Update(Book book);
<BR><BR>    Collection findbyID(int iID);
<BR><BR>    Collection findbyXXXX(XX,XX);
<BR><BR>    Collection findbyPulisherName(String sPublisherName);
<BR><BR>  };
<BR><BR>  上面的类的申明中,Add()用于将内存中的一个Book实例映射到数据库中。Delete()用于删除数据库中的某一个记录。Update()用于更新表中的一个记录。而findbyXXXX()则对应于SELECT语句。
<BR><BR>  对于涉及到多个表操作时,可以有两种方式。一种是象BookTable一样,专门封装一个类。另一个方法是,直接在BoolTable中写一个findbyPublisherName()。这个方法设计成返回一个Book的集合。
<BR><BR>  上面只是简单的介绍了怎样实现实体类和会话类。在具体的应用中,还要考虑到数据库操作的一致性。下面就介绍一下事务处理的相关内容。
<BR><BR>    <strong>三、事务处理</strong>
<BR>
  为了确保对数据操作的完整和一致,在程序设计时要充分考虑到事务处理方面的问题。
<BR><BR>  1.JDBC中怎样将多个SQL语句组合成一个事务。
<BR><BR>  在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。
<BR><BR>  在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。
<BR><BR>  下面的代码是一个示范:
<BR><BR>  con.setAutoCommit(false);
<BR><BR>  PreparedStatement updateSales=con.prepareStatement(&quot;UPDATE COFFES SET SALES=? WHERE COF_NAME LIKE ?&quot;);
<BR><BR>  updateSales.setInt(1,50);
<BR><BR>  updateSales.setString(2,&quot;Colombian&quot;);
<BR><BR>  updateSales.executeUpdate();
<BR><BR>  PreparedStatement updateTotal=con.prepareStatement(&quot;UPDATE COFFEES SET TOTAL =TOTAL+ ? WHERE COD_NAME LIKE ?&quot;);
<BR><BR>  updateTotal.setInt(1,50);
<BR><BR>  updateTotal.setString(2,&quot;Colombian&quot;);
<BR><BR>  updateTotal.executeUpdate();
<BR><BR>  con.commit(0;
<BR><BR>  con.setAutoCommit(true);
<BR><BR>  2.J2EE中分布式事务处理
<BR><BR>  在J2EE中,程序里可以使用JTA来调用底层的JTS(JAVA Transaction Service 提供者服务)来处理分布式的事务处理。另外,如果使用EJB,可以通过在描述文件中指定transaction的属性来实现。
<BR><BR>  有关分布式事务处理的具体内容,请参见J2EE规范。<BR><BR></span> 
        </td>
      </tr>
    </td>
  </tr>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -