ibatis的级联查询、resultmap和resultclass区别

本文介绍了使用ibatis进行一对多级联查询时遇到的问题及解决方法。通过正确配置resultMap,实现从User表到Files表的有效关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用ibatis进行一对多级联查询的时候,一直出现多方的表不能查询到的问题

最后发现是关于resultclass和resultmap的含义没有搞清楚


下面是我的主要代码:

User bean包含一个Files的list

public class User {
	private Integer uid;// 主键
	private String uname;// 名称
	private String password;
	private String phonenumber;
	private String email;
	private List<Files> files ;
	public Integer getUid() {
		.............

sql配置:一个user可对应多个files

<span style="white-space:pre">	</span><typeAlias alias="user" type="com.bh.demo.bean.User" />
	<typeAlias alias="files" type="com.bh.demo.bean.Files"/>
	<resultMap id="user" class="user">
		<result column="uid" property="uid" jdbcType="DECIMAL" />
		<result column="uname" property="uname" jdbcType="VARCHAR" />
		<result column="password" property="password" jdbcType="VARCHAR" />
		<result column="phonenumber" property="phonenumber" jdbcType="VARCHAR" />
		<result column="email" property="email" jdbcType="VARCHAR" />
		<result column="uid" property="files" select="<u>User.getFilesByUserId</u>" />
	</resultMap>
	<resultMap class="files" id="files">
		<result property="fid" column="fid"/>
		<result property="fname" column="fname"/>
		<result property="fpath" column="fpath"/>
		<result property="uid" column="uid"/>
	</resultMap>


User.getFilesByUserId方法sql

<select id="getFilesByUserId"  parameterClass="int" resultClass="files">
	select fid,fname,fpath,uid  from files where uid=#value#  
</select>

查询User的sql

<select id="login" resultClass="user" parameterClass="java.util.Map">
	select * from user
</select>

但最后进行查询的时候总是得不到User 里面的Files的list

.....

经过一番查找问题发现是User查询的sql配置问题,也就是resultclass和resultmap的问题

resultclass:当查找结束后根据你所配置的类添加数据,当然要保证bean的属性名和表属性名相同,没有严格的一一对应,查询出来的数据你的bean有就放没有就不管

resultmap:根据xml文件的<resultmap>配置的参数来对应到各个数据项里面,当bean的属性名和表的属性名不同时必须得用resultmap进行配置,还有就是关键的是:当进行       级联查询时,由于bean里面的list没有和表中的任何属性对应,所以就必须需要resultmap来配置,并且查询结果参数也必须用resultmap,而不能用                         resultclass


所以我开始用resultclass=“user”无论如何都得不到files,因为根本就没有执行级联查询的User.getFilesByUserId这个sql语句,所以需要如下查询:

<select id="login" resultMap="user" parameterClass="java.util.Map">
	select * from user
</select>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值