今天用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>