映射声明可以包含任何的SQL声明,并且可以使用参数映射与结果映射做为输入和输出。 (存储过程是一种特殊形式的声明)
如果情况很简单,映射声明可直接引用参数和结果类。映射声明通过引用缓存模型元素可以支持缓存。下面的示例显示了元素的声明语法。
Example 3.3. Statement element syntax
<statement id="statement.name" [parameterMap="parameterMap.name"] [parameterClass="alias"] [resultMap="resultMap.name"] [resultClass="class.name|alias"] [listClass="class.name|alias"] [cacheModel="cache.name"] [extends="statement.name"] > select * from Products where Product_Id = [?|#propertyName#] order by [$simpleDynamic$] </statement>
在例3.3中,[]部分是可选的,有些选项是互相排斥的。像例3.4这样简单的声明是完全合法的。
<statement id="InsertTestProduct" > insert into Products (Product_Id, Product_Description) values (1, "Shih Tzu") </statement>
例3.4显然是不可能的,除非你正在运行一个测试。但它确实表明,您可以使用iBATIS去执行任意SQL语句。更有可能的是,您将使用对象映射中的参数映射和结果映射功能
3.3.1声明类型
这个<statement>元素包含了可以被使用的所有类型的SQL声明。通常使用个更具体的声明类型的元素是个好注意,用一个更具体的声明类型的元素可以提供更好的错误检查,甚至更多的功能 (例如,插入语句可以返回一个数据库生成的键)3.1概括了声明类型的元素及其支持的属性和功能。
Statement Element | Attributes | Child Elements | Methods |
---|---|---|---|
<statement> | id parameterClass resultClass listClass parameterMap resultMap cacheModel | All dynamic elements | Insert Update Delete All query methods |
<insert> | id parameterClass parameterMap | All dynamic elements <selectKey> <generate> | Insert Update Delete |
<update> | id parameterClass parameterMap extends | All dynamic elements <generate> | Insert Update Delete |
<delete> | id parameterClass parameterMap extends | All dynamic elements <generate> | Insert Update Delete |
<select> | id parameterClass resultClass listClass parameterMap resultMap cacheModel extends | All dynamic elements <generate> | All query methods |
<procedure> | id parameterMap resultClass resultMap cacheModel | All dynamic elements | Insert Update Delete All query methods |
3.3.3 the SQL
如果您不使用存储过程,在一份声明中最重要的部分,类型元素是SQL。您可以使用任何对您的数据库系统合法的SQL语句,由于iBATIS的SQL贯穿于(ADO.NET)标准,所以可以使用任何声明像不使用iBATIS时一样,
你可以使用你的数据库系统支持的任何功能,甚至多条语句,只要您的驱动程序或提供商持它们。
如果标准,静态SQL是不够的,iBATIS的可以帮助你建立一个动态SQL语句。如需有关动态SQL的3.9节
3.3.3.1。重用的SQL片段
当写SqlMaps,你经常会遇到复制SQL的重复片段,例如一个从条文或约束的声明,iBATIS的提供了一个简单而强大的重用他们的标签,为了简单起见,我们假设我们希望得到一些项目并且想做一个计算。通常,你会写这样的东西:
Example 3.6. Reusing SQL Fragments (Before)