映射两表之间的关系通过两个<resultMap>和两个<statement>元素来完成,用VO来描述两表之间的关系在IBatis框架中,其实仍然是通过SQL来完成的。
怎样用SQL来表达“一对多”和“多对一”的关系呢?可以利用主表的主键作为从表的外键对从表查询,得到的结果就是“一对多”的关系。那么“多对一”呢?可以利用从表的外键对主表进行查询,只能得到惟一的一条记录。因此,必须首先做两个SQL。
1. 用SQL描述关系
<statement id=”getAttackSolution”
parameterClass=”String”
resultMap=”get-attackSolution-result”>
select *
from fw_attacksolution
where parents_attack_event_code = #parents_attack_event_code#
</statement>
<statement id=”getPattackDocument”
parameterClass=”String”
resultMap=”get-pattackDocument-result”>
select *
from attack_document_parents
where parents_attack_event_code = #parents_attack_event_code#
</statement>
利用<statement>元素来完成两句SQL语句,id为“getAttackSolution”的一句,表示根据attack_document_parents表的主键到fw_attacksolution表中进行查询,得到的是多条fw_attacksolution表中的记录,这就是“一对多”的关系描述。id为“getPattackDocument”的一句代码,是根据parents_attack_event_code字段到attack_document_parents表中进行查询,由于parents_attack_event_code字段是attack_document_parents表的主键,所以查询结果必然只有一条,那这就可以表示“一对一”的关系。
2. 关系的对应
接着需要将这些SQL映射到对象上去。在PattackDocument VO中有一个变量属性的类型为List,名为attackSolution,它表示了多个AttackSolution VO的集合,那么这在SQL映射到对象的<resultMap>元素中怎么表示呢?请看下面的代码:
<resultMap id=”get-pattackDocument-result”
class=”struts.sample.cap11.sample1.entity.PattackDocument”>
<result property=”parents_attack_event_code” column=”parents_attack_event_code”/>
<result property=”pattack_mean” column=”pattack_mean”/>
<result property=”attackSolution”
column=”parents_attack_event_code” select=”getAttackSolution”/>
</resultMap>
和没有关系对应的<resultMap>元素相比,多了一个select属性,这个select属性在关系映射中的作用非常大,通过select属性指定的标识可以惟一找到一句查询SQL,而这句查询SQL就表达了“一对多”的关系。这段代码的解释可以是这样的:如果有查询返回的是“get-pattackDocument-result”所指定的VO,当将结果集写入VO的变量属性时,得到一个JDBC无法识别的List类型。于是底层框架就会查找select属性所指定的查询SQL语句。运行这个子查询,并将子查询的结果集写入List,返回到VO的变量属性attackSolution中。
在AttackSolution VO中还有一个pattackDocument的变量属性,它的类型是PattackDocument,同样也可以用<result>元素来声明。
<resultMap id=”get-attackSolution-result”
class=”struts.sample.cap11.sample1.entity.AttackSolution”>
<result property=”attack_event_code” column=”attack_event_code”/>
<result property=”attack_mean” column=”attack_mean”/>
<result property=”attack_action” column=”attack_action”/>
<result property=”parents_attack_event_code” column=”parents_attack_event_code” />
<result property=”pattackDocument”
column=”parents_attack_event_code” select=”getPattackDocument”/>
</resultMap>
它的工作方式和之前所描述的没有差别,惟一的区别是select属性所指定的查询SQL语句查询结果必然是一条记录,即一个对象实例。
可见,select属性所指定的查询SQL既可以是一个集合,也可以是一个对象。
相关推荐
iBATIS-SqlMaps,ibatis映射文件
ibatis-2.3.4.726.jar,ibatis-2.3.0.677.jar,ibatis-2.3.3.720.jar下载,都已放入一个压缩包下。
ibatis-sqlmap ibatis-sqlmap-2 ibatis-sqlmap-2.jar.zip
iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包
apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...
ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip
包括ibatis-common-1.3.1.jar ibatis-common-2.jar
ibatis-2.3.ibatis-2.3.ibatis-2.3
ibatis-sqlmap-2.jar 对数据库进行操作的jar包 很方便使用
ibatis-3-core-3.0.0.200
ibatis-2.3.4.zip ibatis-2.3.4.zip ibatis-2.3.4.zip
ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip
ibatis-dao-2.jar gggggggggggg
ibatis-common-2.jar...........
ibatis-2.3.3.720.jar
iBATIS-SqlMaps2入门代码文档
ibatis-core-3.0.jar 找了半天,终于找到了,很好的解决了我的问题,给所需要之人!~
iBATIS-SqlMaps-2_ja说明资料
ibatis-3-core-3.0.0.204 最新官方下载版