ibatis 開發中的經驗 (一)ibatis 和hibernate 在開發中的理解

來源:互聯網
上載者:User

標籤:des   style   class   blog   code   java   

             這個項目的底層是用ibatis架構完畢,這幾天也是都在用這個架構寫代碼,也有了一些簡單的理解,把項目拿過來後基本的配置都已經配置好了,比方一些事務、日誌控制等,在開發中主要用到的是寫SQL語句以及熟悉ibatis xml檔案都提供的一些標籤,這些標籤大部分是用來處理推斷、邏輯,使得sql能夠動態組裝變的更靈活。

             在寫代碼的工作量上ibatis要比hibernate高一些,在你寫了服務層後還須要些dao層,dao層實現,然後這些在hibernate中不須要自己寫,僅僅寫到服務層就能夠調用hibernate提供的對象直接操縱資料,利用hibernate自己封裝的一些方法完畢資料庫的增刪該茶,hibernate是從java實體類映射到了資料庫表,我們調用它提供的方法就能夠完畢操作資料庫,sql語句會更具調用了它的什麼方法自己主動產生,ibatis是封裝了java實體類到sql語句,運行sql到資料還須要一個過程也是ibatis封裝實現,相比開發人員寫的代碼是不是少了非常多呢。

             什麼時候使用哪一個架構更好一些?

             ibatis適合在須要往一個系統裡面添加新功能,可是表結構不能夠修改的情況,由於ibatis在資料庫操作細節上比hibernate要靈活非常多,它是面向SQL語句的架構而hibernate直接面向表結構,假設要改變表結構修改的地方會比較多。

             對於高並發、非常大的資料量系統中,使用ibatis效果要比hibernate好,我們能夠自己寫最佳化效率高的sql語句和預存程序來解決高資料量問題,從眼下開發來看hibernate寫出來的hsql語句不easy最佳化,關係越複雜效率就會越慢,當然沒有什麼是一成不變的hibernate也會自己支援原生SQL語句,完好自己一些不完美的地方。

             在一個系統的維護上也顯然易見,ibatis佔有明顯優勢它把sql寫在了設定檔中面,維護的時候假如須要改變某個查詢功能,在設定檔中面改改就能夠完畢,假設是hibernate就須要修改代碼並又一次編譯。

             以下這張是ibatis原理圖


              圖中左邊是傳入參數類型、右邊是返回結構類型,中間是設定檔資訊,它支援基礎資料型別 (Elementary Data Type)(int/string/boolean)以及對象、map等類型資料,用起來也比較方便。

              sqlMap-Config.xml相當於hibernate.cfg.xml檔案,sqlmap.xml相當於資源檔,比例如以下配置資訊

              舉一個查詢的範例:一個簡單的下拉式清單方塊查詢

              select載入過程

              當載入select標籤的時候,預設選中option子標籤有selected=true的那個option,選中標籤之後會把option的value屬性值賦給select標籤的value屬性,假設option的value為空白,將<option>測試</option>這兩個開始和結束標籤值賦給select,該實現即是利用了這個賦值過程,value值分為給了0、1、2三個值表示三種類型的查詢條件。

              JSP頁面例如以下

             

<span class="STYLE1">請選取查詢方式:<select name="selectType" value=""><option  <%=selected=="default"? "selected=true" :"" %> value="0">按預設查詢</option><option  <%=selected=="name"? "selected=true" :"" %> value="1">按類型查詢</option><option  <%=selected=="companyname"? "selected=true" :"" %> value="2">按公司查詢</option></select>請輸入keyword:</span>


<!-- Transaction manager for a single JDBC DataSource DAO IoC --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource"><ref local="dataSource" /></property></bean><!-- Apache Database Connection Pool  --><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"><value>${db.driver}</value></property><property name="url"><value>${db.url}</value></property><property name="username"><value>${db.user}</value></property><property name="password"><value>${db.password}</value></property></bean><!-- sqlMapClient for DAOIbatisImpl  --><bean id="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="configLocation"><value>classpath:sql-map-config.xml</value></property><property name="dataSource"><ref bean="dataSource" /></property><property name="lobHandler" ref="lobHandler"/> </bean> <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>  

            sqlmap.xml代碼

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"><!--  Note: auto-generated at 2006-7-6 16:05:43.--><sqlMap namespace="ns">  <resultMap id="orgInfoChildId" class="com.zhjy.domain.Organization">    <result column="id" property="id" jdbcType="VARCHAR" />    <result column="parent_id" property="pid" jdbcType="VARCHAR" />    <result column="name" property="name" jdbcType="VARCHAR" />    <result column="isParent" property="isParent" jdbcType="VARCHAR" />    <result column="checked" property="checked" jdbcType="VARCHAR" />    <result column="open" property="open" jdbcType="VARCHAR" />  </resultMap><!-- 依據左側樹查詢記錄語句開始    --><select id="ns.findContacts_count" resultClass="java.lang.Integer"parameterClass="java.util.Map">SELECT COUNT(ID)FROM category,contactinfo,category_contactinfoWHERE category.ID=category_contactinfo.CATEGORY_ID AND contactinfo.contactid=category_contactinfo.CONTACT_ID<isEqual prepend="and" property="selectType" compareValue="1"><isNotEmpty prepend="" property="keyword">name like ‘%$keyword$%‘</isNotEmpty></isEqual><isEqual prepend="and" property="selectType" compareValue="2"><isNotEmpty prepend="" property="keyword">companyname like ‘%$keyword$%‘</isNotEmpty></isEqual><isEqual prepend="and" property="selectType" compareValue="0"><isNotEmpty prepend="" property="keyword">(name like ‘%$keyword$%‘</isNotEmpty><isNotEmpty prepend="or" property="keyword">companyname like ‘%$keyword$%‘)</isNotEmpty></isEqual><isNotEmpty prepend="and" property="id">id=#id:VARCHAR#</isNotEmpty></select></sqlMap>

              這個是動態載入查詢條件,以後假設新增了查詢選項對應的改改設定檔就能夠,不須要再修改代碼裡面的東西,比曾經靈活了i些。

               ibatis還在使用和熟悉中……


             

    




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.