所谓的命名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>

命名sql数据集的更多相关文章

  1. 解决修改重命名sql Server数据库名称

    错误: 消息 5030,级别 16,状态 2,第 1 行无法用排他锁锁定该数据库,以执行该操作. 解决方法:(原理一样) 1.将数据库设置为单用户模式 (单用户模式指定一次只有一个用户可访问数据库,该 ...

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

    最近遇到一个需要在多用户模式下重新命名数据库的Case, 因为数据库可能被其他用户使用,所以直接修改可能会失败.对于此种情况,我们可以等所有用户结束使用数据库时修改,或者是将数据库切换到单用户模式下进 ...

  3. 重命名sql数据库

    use master select spid from master.dbo.sysprocesses where dbid=db_id('TW') 查看连接,杀死线程 use master kill ...

  4. jpa命名规则 jpa使用sql语句 @Query

    关键字方法命名sql where字句 AndfindByNameAndPwdwhere name= ? and pwd =? OrfindByNameOrSexwhere name= ? or sex ...

  5. mongodb与sql语句对照表

    inert into users value(3,5) db.users.insert({a:3,b:5})     select a,b from users db.users.find({}, { ...

  6. Excel 数据导入SQL XML 自动生成表头

    去出差的时候应客户要求要要将Excel 文件内的数据批量导入到数据库中,而且有各种不同种类的表格,如果每一个表格多对应一个数据表的话, 按照正常的方法应该是创建数据表,创建数据库中映射的数据模型,然后 ...

  7. DataGear 变更部署数据库为SQL Server填坑指南(含转写后的SQL server代码及SQL server配置文件)

    1. 引言 2. 配置数据库链接 3. 引入数据库驱动 4. 手动初始化数据库 5. 改写SQL 6. 其他 7. 参考 1. 引言 DataGear默认使用Derby数据库作为系统的元数据库,至于待 ...

  8. Hibernate SQL查询 addScalar()或addEntity()

    本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询.          对原 ...

  9. Hibernate原生SQL查询

    最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...

随机推荐

  1. 基于本地存储的kvm虚拟机在线迁移

    基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...

  2. sonn_game网站开发01:写在最前面

    之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...

  3. C#异步编程(二)

    async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...

  4. NET Core-TagHelper实现分页标签

    这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...

  5. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  6. C++随笔:.NET CoreCLR之GC探索(2)

    首先谢谢 @dudu 和 @张善友 这2位大神能订阅我,本来在写这个系列以前,我一直对写一些核心而且底层的知识持怀疑态度,我为什么持怀疑态度呢?因为一般写高层语言的人99%都不会碰底层,其实说句实话, ...

  7. ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...

  8. Oracle Standard Error 列表

    今天,我特意从网上找了一些,以及自己平时总结的,关于错误编号和说明,平时我们在写项目的时候,往往是可能会出现下面这些错误,例如:违反唯一约束,无效的会话ID,等等.希望对大家有点帮助!可以看看,如果有 ...

  9. [高性能MYSQL 读后随笔] 关于事务的隔离级别(一)

    一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做dd ...

  10. .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系

    .Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...