此例中,
一个数据映射定义文件中可以包含多个CacheModels,TypeAliases,ResultMaps,ParameterMaps,Statements(Procedure)。因为所有项都被加载到同一个配置中,所以可以在一个数据映射中定义映射项,在另一个数据映射中使用这个项。
7.2数据操作指令映射(MappedStatements)
映射指令可以包含任何的数据操作指令,使用参数映射和结果映射指令的输入和输出。存储过程是一种特殊的操作指令。下面给出操作指令映射元素的语法:
[parameterMap=\[parameterClass=\[resultMap=\[resultClass=\[listClass=\[cacheModel=\[extends=\> select*fromProductswhereProduct_Id=[?|#propertyName#]orderby[$simpleDynamic$] 7.2.1数据操作指令类型(StatementTypes) 可以这么说, extendsid parameterClassresultClasslistClass parameterMapresultMapcacheModelextendsid parameterMapresultClassresultMapcacheModel Alldynamicelements Allquerymethods Alldynamicelements InsertUpdateDelete Allquerymethods 7.2.2存储过程 如果存储过程没有参数,则可以省略 7.2.3SQL 除去存储过程,SQL则是数据库操作指令的最重要部分。iBATIS通过ADO.NET来运行SQL,因此,iBATIS允许使用任何合法的SQL语句,也可以使用任何数据库所支持的函数,甚至一次性传送多个操作指令。 7.2.3.1对SQL片段多次引用 在编制SqlMaps的时候,经常需要把一个SQL拆分成多个片段。iBATIS提供了一个简单又很实用的分割节点来进行SQL的分割。举个简单形象的例子,假设需要查询一些条目的信息,并且需要知道符合条件的条目总行数。 原来的版本中通常按照如下方式编制SqlMaps: FROMitemsWHEREparentid=6 现在则实用 如果有参数,也可以被重复使用,样本如下: WHEREparentid=#value# 在许多情况下,也可以使用扩展属性来达到同样的目的。 7.2.3.2XML转义字符 举个例子,“<”是在XML文件必须用转义字符代替的符号,那么如何在Mapper中编制带有这类符号的SQL呢?可以用XML语法的CDATA元素来对此进行规避。如下: SELECT*FROMPERSONWHEREAGE>#value#]]> 7.3.3自动产生主键: 许多数据库支持自动产生主键值(如自增列),在Oracle,SQLServer,MySQL中都提供这种支持。无论在那种环境下,都可以在 SELECTSTOCKIDSEQUENCE.NEXTVALASVALUEFROMDUAL insertintoPRODUCT(PRD_ID,PRD_DESCRIPTION)values(#id#,#description#) 7.2.4 在应用程序需要的任何地方都可以通过iBATIS来执行任意合法的SQL。对于一些很简单的SQL,可以不必预先设计SQL内容, parameterMap=\select-generate-params\ parameterMap=\select-generate-params\ 注:在DataMappe实例被创建的时候,SQL语句就会生成,因此在执行的时候没有任何外在影响。 7.2.4.1 属性tableby 说明 SQL语句中的数据表名Where条件中使用的列名 是否必须是否 7.2.5指令类型相关的元素属性 六种指令类型元素有着不同的属性。 7.2.5.1id 这个属性是必须的,它是SQL指令的名字,在 7.2.5.2parameterMap 在带有参数的标准SQL中,参数映射定义了各个值与“?”或参数的前后对应顺序表。如下所示: