这里是一个mapped statement较复杂的例子,使用了更多的特性。
<sqlMap id = "Product">
<cacheModel id = "ProductCache" type = "LRU">
<flushInterval hours = "24" />
</property name = "size" value = "1000" />
</cacheModel>
<typeAlias alias = "product" type= "com.ibatis.example.Product" / >
<parameterMap id = "productParam" class = "product">
<parameter property = "id" />
</parameterMap>
<resultMap id = "productResult" class = "product">
<result property = "id" column = "PRD_ID" />
<result property = "description" column = "PRD_DESCRIPTION" />
</resultMap>
<select id = "getProduct" parameterMap = "productParam" resultMap = "productResult" cacheModel = "product-cache">
select * from PRODUCT where PRD_ID = ?
</select>
</sqlMap>
太麻烦了?虽然框架为您做了很多工作,为了完成一个简单的查询操作,依然需要做很多。别担心,下面是一个简洁版本。
<sqlMap id = "Product">
<select id = "getProduct" parameterClass = "com.ibatis.example.Product" resultClass = "com.ibatis.example.Product">
select
PRD_ID as id,
PRD_DESCRIPTION as description
from PRODUCT
where PRD_ID = #id#
</select>
</sqlMap>
但是简洁版本的行为和前一个声明的行为不太一样。首先,简洁版本没有定义缓存,因此每一个请求都要读取数据库。其次,简洁版本使用了框架的自动映射特性,这将带来一些副作用。但是这两者在Java代码中执行方式完全一致,因此您可是可以先使用一个简单的方案,灯将来需要时再换成更好地版本。首先应用最简单的方案,是很多现代方法学的最佳实践。
注意一个SQL Map XML映射文件可以包含任意多个Mapped Statement,Parameter Map 和 Result Map。按照它们之间的逻辑关系,为您的应用合理的组织Mapped Statement,Parameter Map和Result Map。
注意,SQL Map的名称是全局性地,在所有的SQL Map文件中名称必须是唯一的。