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

来源:互联网 发布:java集成测试工具 编辑:程序博客网 时间:2024/05/28 23:20

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




0 0
原创粉丝点击