命名sql数据集

所谓的命名sql其实也就是数据库里的sql语句,普元EOS里做了一定的封装,以方便在程序中的使用。

命名SQL的基本元素包括:

1. <parameterMap> parameterMap负责将对象属性映射成statement的参数。

2. <resultMap> resultMap负责将结果集的列值映射成对象的属性值

3. <statement>(Mapped Statement)元素是个通用声明,可以用于任何类型的sql语句,

但具体的statement类型(即<insert>、<update>、<delete>、<select>、<procedure>)

提供了更直观的XML DTD,因此强烈推荐使用。下表总结了statement类型及其属性:Statement类型 属性

《一》对于各个statement的用法举例:

(1)如果在脚本或样式表中使用特殊字符(例如< 或&)或实体引用(例如< 或&),则需要将脚本或样式表的内容标记为CDATA(字符数

据)节,如果不使用CDATA的话就必须使用相应的实体来代替,例如<必须用&lt;来替换

(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>
时间: 2024-12-19 19:18:33

命名sql数据集的相关文章

普元EOS中命名sql数据集

所谓的命名sql其实也就是数据库里的sql语句,普元EOS里做了一定的封装,以方便在程序中的使用. 命名SQL的基本元素包括: 1. <parameterMap> parameterMap负责将对象属性映射成statement的参数. 2. <resultMap> resultMap负责将结果集的列值映射成对象的属性值 3. <statement>(Mapped Statement)元素是个通用声明,可以用于任何类型的sql语句, 但具体的statement类型(即&l

利用存储过程来重命名SQL Server数据库

最近遇到一个需要在多用户模式下重新命名数据库的Case, 因为数据库可能被其他用户使用,所以直接修改可能会失败.对于此种情况,我们可以等所有用户结束使用数据库时修改,或者是将数据库切换到单用户模式下进行操作. 有时候,我们在开发过程中需要直接把生产环境的数据库拿到开发环境来测试开发.我们可以直接重命名生产环境上的数据库.这样以来,即使你有些SQL没有保存,也可以直接从原来的数据库中抓取. 有两个重要的细节我们必须注意 当重名名数据库时, filegroup的名字和数据文件名(.mdf,.ldf)

命名sql和本地sql

MySql插入查询的数据(命名Sql常用)

1.导入渠道对账索引 insert into rec_sourceidx (         trandt,transq,chnlcd,chnldt,chnlsq,chnlst,tranam,matched ) select (#trandtidx#,#transqidx#,#chnlcdidx#,#chnldtidx#,#chnlsqidx#,#chnlstidx#,#tranamidx#,'Y')  from #tablename# where #trandtidx#>=date_sub(#

MySql更新语句(命名Sql)

1.匹配并更新渠道匹配状态 UPDATE rec_sourceidx a,rec_data b SET a.matched='Y' AND b.matched='Y' WHERE a.chnlcd=b.chnlcd AND a.chnldt=b.chnldt AND a.chnlsq=b.chnlsq AND a.chnlcd=#chnlcd#; AND a.chnlst=#lchnlst# and b.chnlst=#fchnlst# 2.根据核心流水更新平台交易状态 UPDATE #tabl

20141214 pl/sql developer 查询、删除、重命名

查询某字段含中文字 select * from issue i where  asciistr(i.id) like '%\%' 查询某字段含英文字母 select * from issue i where regexp_like(i.id,'.([a-z]+[A-Z]))   (红色字体随意改变) 重命名 SQL script窗口里,表名上右键选择‘rename’,在弹出窗口中修改,点击‘OK’ 删除表 选择my objects ,找到表名,右键选择‘drop’

笔记:Hibernate SQL 查询

Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程. SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口的子接口,完全可以使用Query接口的方法,SQLQuery增加了二个重载方法 addEntity():将查询到的记录与特定的实体关联 addScalar():江查询的记录关联标量值 执行SQL的步骤如下: 获取Hib

SQL注入原理讲解

原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号.密码等互联网信息被盗取的普遍担忧. 网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,由于设计的漏洞导致了不可收拾的恶果,验证了一句话“出来混的,迟早是要还的”,所

Hibernate之SQL查询

Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用Hibernate作为持久层技术. 我们知道 使用HQL查询 主要牵涉的是 Query接口,而使用SQL查询 主要牵涉的 是 SQLQuery接口  . 而SQLQuery接口 是 Query接口的子接口. 所以 Query接口中的方法 ,均可以在SQLQuery接口中使用 ,SQLQuery接口还多