ibatis 关联自己,怎么映射 xml ?
比如,类定义如下:
public class Address {
private int id;
private String homeAddress;
private String workAddress;
}
public class Person {
private int id;
private String name;
private Person spouse; // 配偶也是人,所以引用 Person 类型
private Address address;
}
我这样映射:
<select id="selectById" parameterType="int" resultMap="detailedPerson">
select *
from TPERSON p
where p.id = #{id}
</select>
<resultMap type="Person" id="detailedPerson">
<association property="spouse" column="SPOUSE" javaType="Person" jdbcType="INTEGER" select="PersonMapper.selectById" />
<association property="address" column="ADDRESS" javaType="Address" jdbcType="INTEGER" select="AddressMapper.selectById" />
</resultMap>
但是报错,注释掉 “<association property="spouse" column="SPOUSE" javaType="Person" jdbcType="INTEGER" select="PersonMapper.selectById" />”
就没有问题,成功执行···
Address 关联没问题,但是 关联自己的那个 spouse 就有问题??
折腾了半天就是不行,请教了同行的朋友及同事,均无果···
有人建议在程序里头做,当然可以解决问题,但是那样一来,效率就减半了,因为可能会做两次查询才能得到想要的结果···
于是我就自己研究,老子就不信这个邪,肯定能在 MyBatis 的映射中搞定这类事情,因为 MyBatis 的强项就在这里,结果映射是 MyBatis 的核心···
果然,终于想到了办法,解法如下:
首先,将 Person 类的查询映射 <select> 修改成如下:
<select id="selectById" parameterType="int" resultMap="detailedPerson">
select
p1.id,
p1.name,
p1.spouse,
p1.address,
<!-- 以下三行 “as spouse_xxx” 是特别要注意的地方,下面结果映射要用到 -->
p2.id as spouse_id,
p2.name as spouse_name,
p2.address as spouse_address
from TPERSON p1
left join TPERSON p2 on p2.id = p1.spouse
where p1.id = #{id}
</select>
接着,将 Person 类的结果映射 <resultMap> 修改如下:
<resultMap type="Person" id="detailedPerson">
<association property="spouse" column="SPOUSE" javaType="Person" jdbcType="INTEGER">
<id property="id" column="spouse_id"/>
<result property="name" column="spouse_name"/>
<association property="address" column="spouse_address" javaType="Address" jdbcType="INTEGER" select="AddressMapper.selectById" />
</association>
<association property="address" column="ADDRESS" javaType="Address" jdbcType="INTEGER" select="AddressMapper.selectById" />
</resultMap>
而 Address 类的映射不用修改(此处没有给出,读者自己去做吧)···
跑一下测试程序(留给读者自己去做,此处略),想要的结果出来了,JUnit 的测试结果颜色乖乖地变成了绿色···
搞定收工···
分享到:
相关推荐
ibatis 和 mybatis 的代码生成工具
IBatis/MyBatis Eclipse 插件帮助编码人员从 java 代码导航到 IBatis/MyBatis 配置 xml 文件。 IBatis/MyBatis 的 sqlmap 元素可以在程序员按下 Ctrl 并点击 Java 代码中的 sqlmap 元素 id 时显示出来。 该插件还...
可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...
ibatis和mybatis对比
iBatis和MyBatis对比
一键转换,不用自己再手动替换标签
ibatis mybatis crud 完整代码
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github
在里面总结了ibatis和mybatis的主要区别,包括xml文件等
ibatis插件和详细安装的解说
NULL 博文链接:https://wg84cn.iteye.com/blog/1057267
springMvc与ibatis,mybatis,jdbc集合,简单易懂,适合初学。
mybatis和ibatis代码生成工具
Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf ...
先安装 eclipse插件安装地址:http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/ 然后再下载本项目,如果需要离线插件,请到笔者资源库查找 内含mysql 和 oracle 理论上sqlserver...
mybatislink eclipse 根据接口自动跳转到xml,支持早期ibatis、mybatis
学习iBatis与MyBatis非常不错的教程。这两个文档都是我因工作需要快速学习过,我能很快学会,相信你也能很快学会
NULL 博文链接:https://wangjiankui1989.iteye.com/blog/1141198
ibatis mybatis 分页 crud 完整代码 如有不清楚的地方:可访问公司网站:www.meihuangkeji.com 进一步交流讨论。
自己总结的myBatis和ibatis的区别