Mybaits一对多映射结果集丢失数据问题

        目前Java Web开发使用最多的项目架构仍是MVC,数据库持久层使用通常会选择用mybatis或者hibernate框架。对于mybatis和hibernate之间的区别你们自行百度,今天主要是记录下最近使用mybatis开发遇到的一个问题。java

问题描述:A表和B表是一对多的关系,所以在查询的时候使用了mybatis 的一对多结果集映射查询,可是sql语句在库中查出来是10条(分页)数据,可是映射结果集后老是会少几条数据,并且有时候少的条数据会不同(受查出的数据集影响)sql

问题还原:下面采用伪代码模拟实际业务场景遇到的问题数据库

@Bean
public class A{

    private String id;

    private String aname;
    
    private List<B> blist;

}


@Bean
public class B{

    private String id;

    private String bname;
    

}
<?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="AMapper" >

  <resultMap id="BaseResultMap" type="A" >
      <result column="aname" property="aname" jdbcType="VARCHAR" />
      <collection property="blist" ofType="B">  
            <id column="sid" property="id"/>
            <result column="bname" property="bname"/>
       </collection>  
  </resultMap>

</mapper>

缘由分析:面对这个问题在仔细检查了sql 语句后,肯定不是sql语句问题,是结果集映射致使的,因而检查结果集映射代码,发现结果集映射出了问题,没有映射a表的主键致使数据集的合并,致使的数据丢失。(题外话:这个问题致使的主要缘由是我开发的时候表结构是没有主键的,后来有由于业务的变化致使了表关系变化成一对多,表也加上了主键,可是结果集映射关系没有及时更改致使映射数据丢失)        mybatis

相关文章
相关标签/搜索