zoukankan      html  css  js  c++  java
  • 使用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
     
  • 相关阅读:
    没有被实例化的类 中的 非static成员函数竟然也可以被调用。。。前提是该成员函数没有用到成员变量
    c++注意
    关于类大小的小试验
    C语言|博客作业02
    在C#中进行时间和时间戳的转换
    正则表达式中匹配中括号 [ ]
    在C#中将对象序列化成Json格式
    在MSSQL中的简单数据类型递归
    HTML中padding和margin的区别和用法
    C#中的对称加密
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/11457449.html
Copyright © 2011-2022 走看看