所谓的命名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的话就必须使用相应的实体来代替,例如<必须用<来替换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>