亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

使用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 方法提交你的改動。不考慮你的事務成功與否

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
揄拍成人国产精品视频| 久久久av网站| 久久精品国产精品| 亚洲人在线视频| 欧美在线观看网站| 亚洲美女av在线| 欧美乱妇高清无乱码| 国产一区二区美女视频| 国内精品久久久久久久| 日韩精品在线免费| 91精品国产九九九久久久亚洲| 亚洲第一精品久久忘忧草社区| 国产精品免费电影| 日韩视频精品在线| www日韩欧美| 亚洲精品一区久久久久久| 日韩免费观看在线观看| 亚洲欧美日韩在线高清直播| 亚洲成人教育av| 久久久久久久久久av| 欧美午夜丰满在线18影院| 8050国产精品久久久久久| 欧美性xxxxx极品娇小| 国产视频福利一区| 国产69久久精品成人| 亚洲精品有码在线| 欧美高清电影在线看| 国产精品大陆在线观看| 亚洲美女激情视频| 成人激情av在线| 国产精品免费久久久| 久久久国产一区二区三区| 欧美精品在线观看| 在线成人激情黄色| 蜜月aⅴ免费一区二区三区| 国产91精品高潮白浆喷水| 免费成人高清视频| 国产精品一区二区女厕厕| 亚洲自拍小视频| 国产精品久久综合av爱欲tv| 久久久之久亚州精品露出| 精品亚洲一区二区三区在线播放| 精品国产乱码久久久久久虫虫漫画| 5278欧美一区二区三区| 欧美大全免费观看电视剧大泉洋| 久久久久久久香蕉网| 日韩欧美在线一区| 视频在线一区二区| 在线观看不卡av| 亚洲精品综合精品自拍| 色yeye香蕉凹凸一区二区av| 亚洲自拍另类欧美丝袜| 久久久亚洲国产天美传媒修理工| 欧美精品免费在线| 欧美xxxx18性欧美| 久久久精品久久久久| 亚洲伊人久久大香线蕉av| 国产一区私人高清影院| 亚洲精品456在线播放狼人| 亚洲国产欧美精品| 国产精品视频久久久久| 久久精品99久久香蕉国产色戒| 久久韩国免费视频| 九九综合九九综合| 欧美黑人国产人伦爽爽爽| 久久韩国免费视频| 亚洲日韩中文字幕| 黄色一区二区在线| 91免费版网站入口| 国产日韩精品在线播放| 日韩av免费观影| 国产精品69精品一区二区三区| 亚洲日韩中文字幕| 中文字幕国内精品| 97视频在线播放| 综合欧美国产视频二区| 91精品国产高清久久久久久91| 韩国国内大量揄拍精品视频| 97香蕉久久夜色精品国产| 久久久久久久国产精品| 国产精品色午夜在线观看| 欧美成人小视频| 日韩电影免费在线观看| 亚洲福利在线观看| 成人在线播放av| 国产精品一区二区三区免费视频| 激情成人中文字幕| 国产专区欧美专区| 国产一区二区黄| 国产精品免费看久久久香蕉| 久久精品国产一区二区三区| 国产精品1234| 成人黄色在线播放| 91精品中国老女人| 日韩小视频在线| 国产专区欧美专区| 92福利视频午夜1000合集在线观看| 国产亚洲aⅴaaaaaa毛片| 国产乱肥老妇国产一区二| 日韩视频―中文字幕| 久久久久日韩精品久久久男男| 精品久久久香蕉免费精品视频| 国产免费一区二区三区香蕉精| 日韩欧美福利视频| 在线视频欧美性高潮| 亚洲精品国产拍免费91在线| 91天堂在线观看| 日韩精品在线观| 日韩欧美亚洲国产一区| 亚洲免费影视第一页| 97久久伊人激情网| 午夜精品99久久免费| 亚洲国产精品女人久久久| 一区二区三区美女xx视频| 亚洲日本aⅴ片在线观看香蕉| 另类专区欧美制服同性| 国产欧美一区二区三区视频| 国产精品欧美久久久| 国产精品第1页| 日韩欧美在线一区| 91黑丝在线观看| 亚洲免费精彩视频| 欧美电影院免费观看| 欧美诱惑福利视频| 久久视频精品在线| 国产成人97精品免费看片| 亚洲国产福利在线| 91久久精品美女| 性欧美办公室18xxxxhd| 一区二区三区无码高清视频| 久久人人爽国产| 亚洲欧美日韩一区二区在线| 成人国内精品久久久久一区| 最近2019年好看中文字幕视频| 亚洲欧洲国产精品| 国产91色在线|| 中文字幕亚洲一区在线观看| 91在线免费视频| 91精品国产乱码久久久久久蜜臀| 中文字幕国产精品久久| 久久国产精品亚洲| 91av网站在线播放| 91麻豆国产精品| 最近2019中文字幕mv免费看| 欧美精品亚州精品| 国产精品偷伦免费视频观看的| 亚洲欧美视频在线| 国产精品美女免费看| 亚洲一区二区三区sesese| 久久视频在线看| 亚洲精品国产福利| 国产在线观看精品一区二区三区| 日韩av手机在线| 久久久久北条麻妃免费看| 亚洲欧美日韩爽爽影院| 亚洲精品动漫100p| 欧美日产国产成人免费图片| 国产精品流白浆视频| 色先锋资源久久综合5566| 久久视频在线看| 欧美激情高清视频| 日韩免费观看av| 国产精品久久久久久久久久尿| 久久久久久久久网站|