mybatis在进行多表查询的时候遇到多表有重复的列名,会导致查询的结果有误,少赋值,或者错赋值等问题。
尽量减少列名重复,无法避免时可以给列名起别名,用resultMap中的column属性值就是你起的别名,如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.scs.dao.StuScoreMapper">
<resultMap id="StuScoreAll" type="com.scs.domain.StuScore">
<id column="id" property="id"></id>
<result column="score" property="score"></result>
<result column="POINT" property="point"></result>
<result column="log_delete" property="logDelete"></result>
<result column="VERSION" property="version"></result>
<association property="student" javaType="com.scs.domain.Student">
<id column="id" property="id"></id>
<result column="SName" property="name"></result>
<result column="SNum" property="num"></result>
<result column="sex" property="sex"></result>
<result column="LOG_DELeTE" property="logDelete"></result>
<result column="VERSION" property="version"></result>
</association>
<association property="course" javaType="com.scs.domain.Course">
<id column="id" property="id"></id>
<result column="CName" property="name"></result>
</association>
</resultMap>
<select id="tPage" resultMap="StuScoreAll">
SELECT
stu.name SName,
stu.num SNum,
stu.sex,
c.name CName,
ss.score score
FROM student stu, stuScore ss ,course c
WHERE ss.st_Id = stu.Id
and ss.co_Id = c.id
<if test="SNum!=null&SNum!='' ">
and stu.Id = #{SNum}
</if>
<if test="SName!=null&SName!='' ">
and stu.Name like concat('%',#{SName},'%')
</if>
</select>
</mapper>
表字段 -> 别名 -> 模型数据类的属性
//column的值就对应别名SName,并将查询的值设置到student的name属性中
<result column="SName" property="name"></result>
//给stu表的name字段起别名
SELECT
stu.name SName,