Mybatis
1.org.apache.ibatis.exceptions.TooManyResultsException
连表查询时常见的问题,这通常是由于mybatis对与多个数据中字段名称可能一样不能正确做出解析。
-
解决方法1:
重新建表:多个表中列名相同的加前缀加以区分(代价高,相信你不会这么做0.0) -
解决方法2:
在写SQL语句的时候给相同列名的字段取别名。
select u.id as u_id, u.name as u_name, o.id as o_id, o.name as o_name
from tb_user as u, tb_order as o where u.id = o.user_id and u.id = #{id}
当然这还不够,还需要在resultMap中修改字段映射,把column改成你的别名,就完事了。再次列上我的配置。
<resultMap id="UserResult" type="User" >
<id property="id" column="u_id"/>
<result property="name" column="u_name"/>
<collection property="orders" ofType="Order">
<id property="id" column="o_id"/>
<result property="name" column="o_name"/>
</collection>
</resultMap>
<select id="findById" parameterType="java.lang.Integer" resultMap="UserResult">
select u.id as u_id, u.name as u_name, o.id as o_id, o.name as o_name from
tb_user as u, tb_order as o where u.id = o.user_id and u.id = #{id}
</select>