岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 高级技术 >> UML/OO >> Java正文
使用SQLMaps 进行对象关系映射
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 17:52:08

  引论
  
  随着Hibernate逐渐成为其他架构之首,现今的许多工作都是在对象关系(OR)映射域上进行。但是,那些对象关系映射工具有一个问题:大部分数据库管理员似乎对这些对象关系(OR)映射工具所产生的查询不放心。不幸的是,这些数据库管理员不了解,架构所产生的查询是多么的优越,并且使你的应用程序更加灵活。他们觉得随着数据库成为应用程序的主要瓶颈,应该完全控制SQL查询,以便他们能分析和调试以促进性能。
  
  但有个问题是,如果不使用对象关系(OR)映射工具,那么你将花费很多资源在书面形式上和维护低级JDBC代码。由于以下原因,每个JDBC应用程序都将含有重复代码:
  
  1.连接和事务管理。
  
  2.设置java对象为查询参数。
  
  3.转换SQL ResultSets 为 java 对象。
  
  4.生成查询字符串。
  
  iBatis 的 SQLMaps 架构帮助我们在相当大的程度上减少了正常情况下访问关系数据库的java代码的总量。它考虑到了当前三个比较关心的问题,所以它可以将一个简单的 JavaBean 对象映射到 PreparedStatement 参数和 ResultSet 值。SQLMaps 的原理其实很简单:提供一个简单的架构来提供80%的JDBC功能。
  
  这篇文章是关于如何使用 SQLMaps 架构的进阶辅导。我们将建立一个简单的 Struts 应用程序并且用 SQLMaps 配置它为开始。接着,我们将演示如何执行基本的数据库操作比如 SELECT, INSERT, UPDATE 等等。然后,我们将演示 SQLMaps 为连接和事务管理提供的操作。在最后,我们将试着使用一些高级的 SQLMaps 功能部件比如缓存和分页。
  
  SQLMaps 的基本思想
  
  使用 SQLMaps 架构,你必须建立一个XML文件列出所有你希望在应用程序中执行的SQL查询。对于每个SQL查询,你来指定哪个java类可以交换参数和ResultSet(结果集)。
  
  在你的java代码中,如果你想要执行一个特殊的查询,你需要创建一个对象来传递查询参数和必要的条件,然后传递这个对象和查询的名字让 SQLMaps 执行。一旦查询被执行,SQLMaps 将为你指定的接受查询结果的类创建一个句柄,并且将它和数据库返回的ResultSet 中的值存储在一起。
  
  一个简单的使用SQLMaps的应用程序(Hello World)
  
  我们将创建一个简单的Struts应用程序开始来演示什么是使用SQLMaps的应用程序所需要的。这个例子的代码是来自以下资源部分。在这个例子中,我们用一个Jsp页面要求用户输入contactId属性。一旦它被提交,我们用它在CONTACT 表中搜索一个连接,并且用另一个Jsp页面展示给用户。接下来一步一步说明:
  
  1. 拷贝ibatis-sqlmap-2.jar 和 ibatis-common-2.jar 到你的 web-inf/lib 文件夹中。
  
  2. 在你的java源文件夹中创建一个 SqlMapConfig.xml 文件,像这样:
  
  <sqlMapConfig>  <settings useStatementNamespaces="false" />  <transactionManager type="JDBC">    <dataSource type="SIMPLE" >      <property name="JDBC.Driver"        value="COM.ibm.db2.jdbc.app.DB2Driver"/>      <property name="JDBC.ConnectionURL"        value="jdbc:db2:SAMPLE"/>      <property name="JDBC.Username"        value="db2admin"/>      <property name="JDBC.Password"        value="admin2db"/>    </dataSource>  </transactionManager>  <sqlMap resource="Contact.xml"/></sqlMapConfig>
  
  SqlMapConfig.xml 是SQLMaps的部署描述信息,包括以下元素:
  
  <sqlMapConfig>是文件的根元素。<settings>被用来定义应用程序级别的设置;例如 useStatementNamespaces 属性被用来定义是否要用准备说明的全限定名。它可以有一些另外的属性用于控制缓存和初始化;要知道更进一步的细节请查看文档。
  
  <transactionManager> 被用来定义你想要在你的应用程序中使用的事务管理。在我们的例程中,我们要用Connection 对象的 commit 和 rollback 方法来管理事务,所以我们用JDBC作为事项管理程序。它包含 <dataSource> 作为子元素,<dataSource>用来定义你要使用的连接管理的类型。在我们的例程中,我们要用SQLMaps自带的连接池实现,如此我们将使用一个SIMPLE类型的数据源。为了建立连接池,SQLMaps要求像JDBC驱动名称,URL,和密码这些信息,因此,我们使用<property>元素来传递这些信息。稍后,我们将更加详细地讨论各种各样可用的事务和连接管理选项。
  
  <sqlMap>元素被用来表明 SQLMap 配置文件。这些文件,如早先讨论的,列出了你希望执行的SQL查询。
  
  3. 创建一个JavaBean类,Contact.java,有属性 firstName, lastName 和 contactId 和相应的get、set方法。这个类将被用来向ResultSet传递查询参数并读取值。
  
  public class Contact implements Serializable{  private String firstName;  private String lastName;  private int contactId;  //Getter setter methods for firstName,  //lastName and contactId property}
  
  4. 建立一个Contact.xml文件,我们将在文件中列出所有要执行的与表Contact有关的SQL查询。
  
  <sqlMap namespace="Contact"">  <typeAlias alias="contact"    type="com.sample.contact.Contact"/">  <select id="getContact"    parameterClass="int" resultClass="contact"">      select CONTACTID as contactId,          FIRSTNAME as firstName,          LASTNAME as lastName from          ADMINISTRATOR.CONTACT where CONTACTID = #id#  </select></sqlMap>
  
  文件中使用的标签如下:
  
  <sqlMap>是文件的根元素。正常情况下,你的应用程序将有不止一个表,由于你要把与不同表有关的查询分开成不同的名称空间(namespace),<namespace>

[1] [2] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365