MyBatis:多对一表关系详解

本文详细介绍了在MyBatis中处理多对一表关系的方法,强调了使用resultMap的重要性,解释了当字段名不匹配时如何解决,并提供了两个案例,分别演示了查询多个和唯一结果的情况,指出在处理多条记录时应避免使用selectOne,而应使用selectList。
摘要由CSDN通过智能技术生成

1,如果涉及到多表查询,必须用resultMap方式。如果用resultType方式,那么获取的信息只能放到一个类里面,而像Customer和Order这种关系,我们希望查出Customer的同时查出多个他里面的orderList集合,也就是要查询不止一种对象,就必须使用resultMap映射的方式,才能将关联到的那个类的信息拿到。

 

2,如果把配置文件中的查询语句改为 select id,user_name fromcustomer,同时把数据库中的customer表的name字段改为user_name字段,Customer实体类中的name属性名不变,再执行查询,会发现name查不出来。因为查询结果是根据实体类的属性和返回结果集的列字段名对应的,如果不一致,则无法使用set方法注入值。

这种问题也可以通过resultMap的方式解决,用resultMap映射一下就可以了。

例如:定义查询sql语句是:

	<sql id="allColumn">
		id,user_name,password
	</sql>

	<select id="findUserById" parameterType="int" resultType="cn.itcast.domain.User">
		select <include refid="allColumn"/> from user where id=#{id}
	</select>

也就是select id,user_name,password fromuser where id=#{id}

而实体类User中的属性名是username,将数据库中的列名也修改成user_name,返回结果username为null。

修改:通过resultMap方式

	<sql id="allColumn">
		id,user_name,password
	</sql>

	<resultMap type="cn.itcast.domain.User" id="findUserById">
		<id property="id" column="
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值