• 使用mybatis的resultMap进行复杂查询


     
     
    记录下mybatis的集合查询中碰到的问题
     

    MyBatis ofType和javaType区别

     

    mybatis 关联查询 resultMap 同名冲突

     
    使用mybatis的resultMap进行复杂查询
     
    mybatis <collection>标签 类型为string时无法获取重复数据错误
     
    使用resultMap进行一对多关联查询的方式有两种:
    方法 1、 使用左连接查询所有关联数据
    1.     <resultMap id="peopleResultMap" type="People">  
    2.         <id property="id" column="id" />  
    3.         <result property="name" column="name" />   
    4.         <collection property="qqs" ofType="string" javaType="list">  
    5.             <result column="qq" />  
    6.         </collection>  
    7.     </resultMap>  
    8.       
    9.     <select id="selectPeopleById" resultMap="peopleResultMap">  
    10.         select p.*,pq.qq from  
    11.         people p left join  people_qq pq on p.id = pq.people_id   
    12.         where p.id = #{id}  
    13.     </select>
     
    如上面,左连接关联查询出qq表的qq字段,然后将qq通过resultMap的集合类放到这个List<String> qqs这个属性字段中。
    优点:查询数据只需要查询一次就可以了。
    缺点:因为左连接查询,people表一对多qq表,会查询出重复的id数据行。这样就无法使用到数据库自带的分页函数。
    select p.*,pq.qq from  
             people p left join  people_qq pq on p.id = pq.people_id   
             where p.id = #{id} 
    上面这个sql查询出来的数据格式
    如下:
     
    方法 2 使用子查询的方式查询
    1.     <resultMap id="peopleResultMap" type="People">  
    2.         <id property="id" column="id" />  
    3.         <result property="name" column="name" />   
    4.         <collection property="qqs" ofType="string" javaType="list">  
    5.             <result column="qq" />  
    6.         </collection>  
    7.     </resultMap>  
    8.       
    9.     <select id="selectPeopleById" resultMap="peopleResultMap">  
    10.         select p.*,pq.qq from  
    11.         people p left join  people_qq pq on p.id = pq.people_id   
    12.         where p.id = #{id}  
    13.     </select>
     
    子查询,就是在集合列表中调用另一个查询,进行数据赋值。
    优点:可以使用数据库自带的分页函数
    缺点:查询数据需要多次调用子查询进行集合字段数据查询。如果是大数据量查询,将会需要多次调用子查询sql。
     
    mybatis默认使用懒加载的方式进行集合的子查询。存在问题。
    可以查看下面这篇文章:mybatis问题解决
    Springmvc+mybatis,mybatis配置延迟加载时,json序列化异常
    https://ask.csdn.net/questions/344738?sort=comments_count
    
    
    实体类有一个属性是其它实体类的类型,mybatis默认使用了 延迟加载,导致在处理这个类的时候某些属性不能被序列化,因此造成了上述原因
    https://www.oschina.net/question/2312022_2232071
    最近做项目时,使用了mybatis级联查询,配置了懒加载模式,结果通过springMvc返回json时报的错。报错如下:
    https://blog.csdn.net/qq_33548914/article/details/79991280
     
  • 相关阅读:
    ICPC-Beijing 2006 狼抓兔子
    【模板】多项式求逆
    AHOI2014/JSOI2014 奇怪的计算器
    Hnoi2013 切糕
    Ahoi2014&Jsoi2014 支线剧情
    bzoj3774 最优选择
    WC2019游记
    HNOI2007 分裂游戏
    bzoj1457 棋盘游戏
    poj2484 A Funny Game
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/11457449.html
Copyright © 2020-2023  润新知