国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用SQLMaps 進行對象關系映射

2019-11-18 12:20:02
字體:
來源:轉載
供稿:網友

  引論
  
  隨著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> 元素就是被用來指定在此文件中查詢應被放置的名稱空間。
  
  <typeAlias> 用來說明Contact 類的全限定名的一個簡稱。在此說明后,這個簡稱可以被用來替代全限定名。
  
  在SQLMaps架構中 <select> 元素用來聲明SQLMaps架構中的SELECT查詢。它的值就是你能指定的要執行的查詢。id屬性被用來指定通知SQLMaps 執行非凡查詢的名稱。parameterClass 被用來指定傳遞查詢參數的類,resultClass 提供從ResultSet返回值的類的名稱。
  
  5. 在Action類的 execute() 方法內,我們建立了一個SqlMapClient的句柄,它被用來和SQLMaps相互作用。我們必須向SqlMapClientBuilder傳遞SqlMapConfig.xml文件,它被用來讀取配置設置。
  
  DynaActionForm contactForm =    (DynaActionForm)form;  Reader configReader =    Resources.getResourceAsReader("SqlMapConfig.xml");  SqlMapClient sqlMap =    SqlMapClientBuilder.buildSqlMapClient(configReader);  Contact contact = (Contact)    sqlMap.queryForObject("getContact",          contactForm.get("contactId"));  request.setAttribute("contactDetail", contact);  return mapping.findForward("sUCcess");
  
  當你要執行一個SELECT 查詢時,應該使用 SQLMaps 的 queryForObject 方法。在Contact.xml文件中,我們已經指定parameterClass為int,所以我們在傳遞查詢的名稱的時候傳遞一個integer作為contactId (i.e getContact)。
  
  SQLMaps 將返回一個Contact 類的對象。
  
  基本數據庫操作
  
  現在我們要返回我們的所關注的使用SQMLaps如何表示一些基本的數據庫操作。
  
  1. Insert操作
  
  我們從如何執行一個開始Insert操作開始。
  
  <insert id="insertContact" parameterClass="contact">INSERT INTO ADMINISTRATOR.CONTACT( CONTACTID,FIRSTNAME,LASTNAME)    VALUES(#contactId#,#firstName#,#lastName#);</insert>
  
  <insert> 元素被用來聲明一個Insert的SQL查詢。它有一個parameterClass 屬性用來指明哪個JavaBean類將被用來傳遞(request)請求參數。在插入新的記錄時,我們要使用contactId屬性的值,所以我們必須在SQL查詢中使用一個#contactId#。
  
  public void contactInsert() throws SQLException, IOException {  sqlMap.startTransaction();  try {  sqlMap.startTransaction();  Contact contact = new Contact();  contact.setContactId(3);  contact.setFirstName("John");  contact.setLastName("Doe");  sqlMap.insert("insertContact",contact);  sqlMap.commitTransaction();  } finally{    sqlMap.endTransaction();  }}
  
  在我們的java代碼中,我們建立了一個Contact 對象,存放它的值,然后調用sqlMap.insert()方法,傳遞我們要執行的查詢的名稱和 Contact 。這個方法將插入一個新的Contact并且返回新插入的Contact的主鍵。
  
  缺省情況下,SQLMaps 把每個DML方法當作工作的一個單元。但是你能使用 startTransaction, commitTransaction 和 endTransaction 方法來劃分事務處理。通過調用 startTransaction() 方法你可以啟動一個事務處理,此方法也能從連接池中獲得一個連接。在這個事務中,這個連接對象將被用來執行查詢。假如這個事務的所有查詢都被成功執行,應該調用 commitTransaction 方法提交你的改動。不考慮你的事務成功與否

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 政和县| 阳朔县| 尼玛县| 汉川市| 永德县| 双鸭山市| 临高县| 乌兰察布市| 麻阳| 东光县| 扎赉特旗| 龙海市| 铁岭县| 天台县| 辽宁省| 珠海市| 凤阳县| 久治县| 滁州市| 本溪| 平和县| 丰城市| 达孜县| 邢台市| 奉新县| 霍山县| 舟山市| 绥中县| 大丰市| 桐乡市| 达拉特旗| 余姚市| 屏东县| 竹溪县| 会昌县| 江安县| 阳朔县| 江安县| 驻马店市| 江孜县| 禹州市|