命名sql數據集

所謂的命名sql其實也就是數據庫裏的sql語句,普元EOS裏作了必定的封裝,以方便在程序中的使用。java

命名SQL的基本元素包括:  sql

    1. <parameterMap> parameterMap負責將對象屬性映射成statement的參數。數據庫

    2. <resultMap> resultMap負責將結果集的列值映射成對象的屬性值安全

    3. <statement>(Mapped Statement)元素是個通用聲明,能夠用於任何類型的sql語句,app

但具體的statement類型(即<insert>、<update>、<delete>、<select>、<procedure>)框架

提供了更直觀的XML DTD,所以強烈推薦使用。下表總結了statement類型及其屬性:Statement類型 屬性ide

《一》對於各個statement的用法舉例:spa

(1)若是在腳本或樣式表中使用特殊字符(例如< 或&)或實體引用(例如< 或&),則須要將腳本或樣式表的內容標記爲CDATA(字符數code

     據)節,若是不使用CDATA的話就必須使用相應的實體來代替,例如<必須用&lt;來替換xml

(2) 命名Sql中參數用##包起來,生成的是PreparedStatement,還可使用$$把參數包起來,這樣生成的是Statement,就是說在執行sql時

     會先把參數放入到sql中,通常用在like或in操做中。對於in操做寫命名Sql時,參數不能寫成in(#field#)的方式,而應該寫成

      in  ($filed$)的方式,緣由是in操做不支持preparedStatement。

<updateid="saveExamineInfo"parameterClass="java.util.HashMap"  >
            <![CDATA[
                    UPDATE $mainTableName$ T SET T.MAIN_CHECK1 = '$mainCheck1$' ,T.MAIN_CHECK2 = '$mainCheck2$'  
                    WHERE T.MAIN_ID = $mainId$ 
             ]]></update>
     <deleteid="deleteTemplate"parameterClass="java.util.HashMap">
           <![CDATA[
                  delete from IPTSM_TEMPLATEINFO where no = $no$
           ]]></delete>
     <selectid="getTemplateInfo"parameterClass="java.util.Map" resultClass="commonj.sdo.DataObject"  ">
         <![CDATA[
              SELECT NO,IDENTIFY,TITLE, FILENAME,TO_CHAR(MODIFYDATE,'yyyy-MM-dd HH24:mi:ss') MODIFYDATE
              from  IPTSM_TEMPLATEINFO  where identify = '$identify$'   AND  TITLE LIKE '%$title$%' order by  MODIFYDATE desc]]>
      </select>
     <procedure id="swapEmailAddresses" parameterMap="swapParameters">
             {call swap_email_address (?, ?)}
    </procedure>

 將經常使用的或很複雜的工做,預先用SQL語句寫好並用一個指定的名稱存儲起來,   那麼之後要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,便可自動完成命令

存儲過程的優勢:

     1.存儲過程只在創造時進行編譯,之後每次執行存儲過程都不需再從新編譯,而通常SQL語句每執行一次就編譯一次,因此使用存儲過程 

        可提升數據庫執行速度。

     2.當對數據庫進行復雜操做時(如對多個表進行Update,Insert,Query,Delete時),可將此複雜操做用存儲過程封裝起來與數據庫提供的

        事務處理結合一塊兒使用。

     3.存儲過程能夠重複使用,可減小數據庫開發人員的工做量

     4.安全性高,可設定只有某此用戶才具備對指定存儲過程的使用權

《二》parameterMap

parameterMap負責將對象屬性映射成statement的參數。
     <parameterMap  id="parameterMapName"class="commonj.sdo.DataObject">
           <parameter property ="propertyName"
                    [jdbcType="VARCHAR"]屬性javaType用於顯式地指定被賦值參數的類型。若是沒有提供類型將被假定爲Object類型。
                      [javaType="string"]屬性javaType用於顯式地指定被賦值參數的類型。若是沒有提供類型將被假定爲Object類型。
                       [nullValue="NUMERIC"]屬性nullValue的值能夠是對於property類型來講任意的合法值,用於指定NULL的替換值。就是說,當屬性值等於指定值時,相應的字段將賦值NULL。這個特性容許在應用中給不支持null的數據類型(即int,double,float等)賦值null。
 />
             <parameter ...... />
            <parameter ...... />
           </parameterMap>
括號[]是可選的屬性。一個parameterMap可包含任意多的parameter元素。後面討論parameter的各個屬性

 《三》resultMap

在命名SQL框架中,Result Map是極其重要的組件。在執行查詢Mapped Statement時,resultMap負責將結果集的列值映射成對象的屬性值。resultMap的結構以下:
     <resultMap id="resultMapName"class="commonj.sdo.DataObject">
         <result property="propertyName"column="COLUMN_NAME"[columnIndex="1"]
                [javaType="int"] [jdbcType="NUMERIC"] [nullValue="-999999"] />
         <result .../>
         <result .../>
     </resultMap>
括 號[]中是可選的屬性。resultMap的id屬性是惟一標識。ResultMap的class屬性用於指定DataObject的類型名稱(包括 URI)。resultMap能夠包括任意多的屬性映射,將查詢結果集的列值映射成DataObject的屬性。屬性的映射按它們在resultMap中 定義的順序進行

 下面咱們舉例說明:

<?xml version="1.0" encoding="UTF-8"?>
<!-- author:asus -->
<sqlMap>
    <parameterMap class="commonj.sdo.DataObject" id="parameterMap">
        <parameter javaType="date" jdbcType="DATE" property="dateType"/>
    </parameterMap>
    <resultMap class="commonj.sdo.DataObject" id="resultMap">
        <result column="TYPEID" javaType="string" property="typeId"/>
    </resultMap>
    <select id="select_id" parameterClass="java.util.HashMap" resultClass="commonj.sdo.DataObject"><![CDATA[
	   select nvl(s.tdhisrownum, 0) as tdhisrownum,
       decode(nvl(s.customer_name, '0'), '0', '合計', s.customer_name) as customer_name, 
       s.pack_sell_id, 
       s.pack_sell_code, 
       s.pack_sell_name, 
       sum(s.sell_num) as sell_num, 
       s.mscell_name, 
       s.gcmaxdate, 
       sum(s.gctic) as gctic, 
       sum(s.realticsum) as realticsum, 
       sum(s.dktic) as dktic, 
       sum(s.gcticincome) as gcticincome, 
       sum(s.realticincome) as realticincome, 
       sum(s.dkticincome) as dkticincome,
       s.empname,
       s.hxdate,
       case s.hasproblem 
       when 'p1' then '有'
       when 'p2' then '無' 
       else null end as hasproblem,
       case s.pronature
       when '1' then '資金緊張' 
       when '2' then '項目問題' 
       when '3' then '客戶問題'
       when '4' then '其餘問題' 
      else null end as pronature,
       s.prodesc, 
       s.solutions,
       s.orgid,
       s.orgname 
          from dp_report_packtictdhis s
	]]>
		<dynamic prepend="WHERE">
			<isNotNull prepend="AND" property="orw1">
           			s.dktic > 0
       		</isNotNull>
			<isNotNull prepend="AND" property="customerName">
		    		customer_name like '$customerName$'
		    </isNotNull>		       		
		    <isNotNull prepend="AND" property="packSellCode">
		           			pack_sell_code like '%$packSellCode$%'
		    </isNotNull>
		    <isNotNull prepend="AND" property="packSellName">
		           			pack_sell_name like '%$packSellName$%'
		    </isNotNull>
		    <isNotNull prepend="AND" property="empname">
		           			empname like '%$empname$%'
		    </isNotNull>
		    <isNotNull prepend="AND" property="orgname">
		           			orgname like '%$orgname$%'
		    </isNotNull>
		    <isNotNull prepend="AND" property="hasproblem">
		           			hasproblem like '%$hasproblem$%'
		    </isNotNull>
		    <isNotNull prepend="AND" property="pronature">
		           			pronature like '%$pronature$%'
		    </isNotNull>
		    <isNotNull prepend="AND" property="hxdate">
		           			hxdate >= to_date('$hxdate$','yyyy-mm-dd hh24:mi:ss')
		    </isNotNull> 
		    <isNotNull prepend="AND" property="tohxdate">
		           			hxdate <= to_date('$tohxdate$','yyyy-mm-dd hh24:mi:ss')
		    </isNotNull>
		    <isNotNull prepend="AND" property="gcmaxdate">
		           			gcmaxdate >= to_date('$gcmaxdate$','yyyy-mm-dd hh24:mi:ss')
		    </isNotNull> 
		    <isNotNull prepend="AND" property="togcmaxdate">
		           			gcmaxdate <= to_date('$togcmaxdate$','yyyy-mm-dd hh24:mi:ss')
		    </isNotNull>
       		
		</dynamic>
		group by rollup((s.tdhisrownum,s.customer_name, s.pack_sell_id, s.pack_sell_code,
                  s.pack_sell_name, s.mscell_name, s.gcmaxdate, s.empname,
                  s.hxdate, s.hasproblem, s.pronature, s.prodesc,
                  s.solutions, s.orgid,s.orgname))
		order by tdhisrownum asc,s.hxdate asc
	</select>
</sqlMap>
相關文章
相關標籤/搜索