问题如图:
数据库mysql查询出来是4条记录
然而mybatis接收List的size是3条
出问题的代码如下,xml中,select了两个表,两个表都有id列
<resultMap id="BaseMap" type="net.yto.basesrv.api.po.test1.OrderAndUser2">
<id column="id" property="id"/>
<result column="id" property="userId"/>
<result column="number" property="number"/>
<result column="orders_id" property="ordersId"/>
<association property="user1" javaType="net.yto.basesrv.api.po.test1.User1">
<id column="id" property="id"/>
<result column="sex" property="sex"/>
<result column="username" property="username"/>
</association>
</resultMap>
<select id="findOneToOneMap" resultMap="BaseMap">
select a.id ,a.user_id,a.orders_id,a.number,b.id ,b.sex,b.username
from tb_orders a,tb_user b
where a.user_id=b.id;
</select>
List<OrderAndUser2> list=crabExpPriceMapper.findOneToOneMap();//list的size不对,有问题
System.out.println("======"+list);
if(list!=null && list.size()>0){
JsonArray arr=new JsonArray();
for(OrderAndUser2 u:list){
JsonObject dataObj=new JsonObject();
dataObj.addProperty("sex",u.getUser1().getSex());
dataObj.addProperty("number",u.getNumber());
arr.add(dataObj);
}
data.add("items",arr);
}
@Mapper
public interface CrabExpPriceMapper {
List<OrderAndUser2> findOneToOneMap();//返回结果用resultmap接收
}
解决:
https://blog.csdn.net/LoveCarpenter/article/details/60958710
将xml修改如下即可
查询两个表,当两个表都有id时,定义别名。
以下两种方式改造,均可查出正确的记录数,选择任一即可。
1.resultmap中相同的列,都定义别名(建议采用此方法)
2.select 中相同的列,都定义别名
注意:resultmap和select都修改,相同的列都定义别名,查出的记录数是有问题的。
<resultMap id="BaseMap" type="net.yto.basesrv.api.po.test1.OrderAndUser2">
<id column="id" property="id"/>
<result column="aid" property="userId"/>
<result column="number" property="number"/>
<result column="orders_id" property="ordersId"/>
<association property="user1" javaType="net.yto.basesrv.api.po.test1.User1">
<id column="bid" property="id"/>
<result column="sex" property="sex"/>
<result column="username" property="username"/>
</association>
</resultMap>
<select id="findOneToOneMap" resultMap="BaseMap">
select a.id aid,a.user_id,a.orders_id,a.number,b.id bid,b.sex,b.username
from tb_orders a,tb_user b
where a.user_id=b.id;
</select>