Mybatis一对多的实现

本文介绍了一个涉及游戏账号与学生信息关联查询的数据库设计案例。通过创建游戏账号表并实现与学生表的外键关联,文章详细展示了如何使用MyBatis进行复杂的数据查询,包括 resultMap 的配置及 SQL 语句的设计。

在上一篇一对一(http://t.cn/RtRMfxi)建表的基础上,再建立一张游戏账号表,一个学生可能有多个游戏账号:

-- f_account

CREATE TABLE `f_account` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_num` varchar(20) NOT NULL COMMENT '账号',
  `u_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `f_account_ibfk_1` (`u_id`),
  CONSTRAINT `f_account_ibfk_1` FOREIGN KEY (`u_id`) REFERENCES `f_stu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

修改配置文件,添加一个select方法:

tips:resultMap可以继承,collection标签要使用ofType,association要有column属性和javaType.

    <resultMap type="stu" id="stuAndCardAndAccountResultMap"
		extends="stuAndCardResultMap">
		<collection property="accounts" ofType="Account">
			<id column="account_id" property="id"/>
			<result column="account_num" property="accountNum"/>
			<result column="u_id" property="uId"/>
		</collection>
	</resultMap>    

    <!-- 查询出拥有游戏账号的人 -->
	<select id="findStuAndCardAndAccountResultMap" resultMap="stuAndCardAndAccountResultMap">
		SELECT
		A.*, B.card_num, C.account_num, C.id AS account_id, C.u_id
		FROM f_stu A
		LEFT JOIN f_account C ON C.u_id = A.id
		LEFT JOIN f_IDcards B ON A.id = B.u_id
		WHERE !ISNULL(C.account_num)
		ORDER BY A.id
	</select>

在对应的mapper代理接口中添加此方法,进行测试:

083857_xAbg_2861620.png

083910_pxfP_2861620.png数据可以自己添加一些测试数据.

转载于:https://my.oschina.net/kkdo/blog/734350

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值