MyBatis多表关系查询时的注意事项

来源:互联网 发布:人肉搜索 网络暴力 编辑:程序博客网 时间:2024/04/29 17:46

property:类中的属性名

column:表中的字段名称    sql语句查询出来的字段的名称  如果没有起别名那么默认的就是数据库中表的别名 如果起别名那么就要用别名

坑点:

数据库:注意看外键关系

position表


user表


 <!-- 查询结果集注意   position p中主键的字段名是id  user u中字段的值同样是id  如果结果查询语句和结果集如下 -->

<select id="selPos1" resultMap="brm1">  select p.*,u.id,u.username,u.password from position p,user u   where p.id = u.pid and p.id=#{id}  </select>  <!-- 自定义结果集 -->  <resultMap type="Position" id="brm1">  <id property="id" column="id"/>  <result property="name" column="name"></result>  <result property="infor" column="infor"></result>  <collection property="users" ofType="User">  <id property="id" column="id"/>  <result property="username" column="username"></result>  <result property="password" column="password"></result>  </collection>  </resultMap>

如图所示如果查询一个id为position时  所带出来的user只有一个 但是数据库中有两个user

为什么?因为p.*中查出来的一个字段叫id   u.id的字段也叫id  重复了  下面集合给user的主键id赋值时  id都是取最前面的id  也就是p.*中的id

所以只有一个user  而且id和数据库中的id不符合

解决:起别名

<select id="selPos1" resultMap="brm1">  select p.*,u.id uid,u.username,u.password from position p,user u   where p.id = u.pid and p.id=#{id}  </select>  <!-- 自定义结果集 -->  <resultMap type="Position" id="brm1">  <id property="id" column="id"/>  <result property="name" column="name"></result>  <result property="infor" column="infor"></result>  <collection property="users" ofType="User">  <id property="id" column="uid"/>  <result property="username" column="username"></result>  <result property="password" column="password"></result>  </collection>  </resultMap>


原创粉丝点击