ibatis 多表关联 字段名重复,然后映射到类的时候后面的字段跟前面的一样了,sql查询返回值当然是不一样的
比如:一个教师表里对应2个class字段
<resultMap id="tch" resultClass="tch">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="c1" column="class1"/>
<result property="c2" column="class2"/>
<result property="class1" resultMap="Class.class" />
<result property="class2" resultMap="Class.class" />
</resultMap>
<resultMap id="class" resultClass="class">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="desc" column="desc" />
<result property="level" column="level" />
</resultMap>
sql:select tch.*,class1.*,class2.* from tch left join class1 on tch.c1=class1.id
left join class2 on tch.c1=class2.id
映射后class2中的值不对,请高手说明
比如:一个教师表里对应2个class字段
<resultMap id="tch" resultClass="tch">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="c1" column="class1"/>
<result property="c2" column="class2"/>
<result property="class1" resultMap="Class.class" />
<result property="class2" resultMap="Class.class" />
</resultMap>
<resultMap id="class" resultClass="class">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="desc" column="desc" />
<result property="level" column="level" />
</resultMap>
sql:select tch.*,class1.*,class2.* from tch left join class1 on tch.c1=class1.id
left join class2 on tch.c1=class2.id
映射后class2中的值不对,请高手说明
1、resultMap里的配置<result/>的时候那里面的column并不是指你的数据库表的字段名而是你的SQL里查询的时候使用的名字,那么你可以给每个字段起别名啊。2、既然你的tch类里有超过一个的class类型的对象,为什么不用List呢?写SQL居然用SELECT * ,汗一个。领导看到你这么写SQL不骂你吗?
select class1.id as id...?如果是这种方式的话class2中的别名怎么设置
select class1.id as class1.id...?如果是这种方式的话报错设不进去的
<result property="id" column="id_one" />
class2:
<result property="id" column="id_two" /> sql:
select class1.id as id_one,class2.id as id_two咯很明显,如果两表有同名字段,是不能select class1.*,class2.*滴
比如class1中有id字段,class2中也有id字段你可以起不同的别名啊比如:
<select id="querySingleRoleByRoleDTO" parameterType="roleDTO" resultMap="roleDTOMap">
SELECT
r.FID AS rid,
r.FNAME AS rname,
n.FID AS nid,
n.FNAME AS nname,
n.FLINK AS nlink,
n.FTYPE_CODE AS ntypeCode,
n.FPARENT_ID AS nparentId,
n.FLEVEL AS nlevel
FROM
T_SYS_ROLE r LEFT OUTER JOIN T_SYS_ROLE_FUNC_REL rel on r.FID = rel.FROLE_ID
LEFT OUTER JOIN T_SYS_FUNC_NODE n on rel.FNODE_ID = n.FID
<where>
<if test="id > 0 ">
r.FID = #{id}
</if>
<if test="name != null && name != '' ">
AND r.FNAME = #{name}
</if>
</where>
</select> <resultMap type="roleDTO" id="roleDTOMap">
<id property="id" column="rid"/>
<result property="name" column="rname"/>
<collection property="nodes" ofType="nodeDTO" resultMap="nodesDTOMap"/>
</resultMap>
<resultMap type="nodeDTO" id="nodesDTOMap">
<id property="id" column="nid"/>
<result property="name" column="nname"/>
<result property="link" column="nlink"/>
<result property="typeCode" column="ntypeCode"/>
<result property="parentId" column="nparentId"/>
<result property="level" column="nlevel"/>
<result property="needUserInfo" column="nneedUserInfo"/>
</resultMap>
注意, SELECT语句里,AS后面的别名是唯一的就OK了。