ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mybatis之sql执行有数据但返回结果为null

2022-06-18 23:03:06  阅读:224  来源: 互联网

标签:MyBatis batch resultMap 查询 resultType sql mybatis null 属性


https://wenku.baidu.com/view/5bac99074b2fb4daa58da0116c175f0e7dd1194b.html

 

最近在使⽤mybatis查询数据库时,发现在pl/sql中单独执⾏sql时结果是有值的,但是在程序中拿到的却是null,相关配置如下:
  (1)
<resultMap type="monitorTaskStatus" id="monitorTaskStatusMap">
<result column="BATCH_NUM" property="batchNum"/>
<result column="TASK_STATUS" property="taskStatus"/>
<result column="CALLED_PHONENUM" property="calledPhoneNum"/>
</resultMap>
  (2)
<select id="queryStatusByProjectId" parameterType="java.lang.String" resultType="monitorTaskStatusMap">
select b.batch_num, c.called_phonenum,c.task_status
from cc_call_task c
left join cc_batch_calledperson b
on c.batch_id = b.batch_id
where b.batch_type in (2, 3)
and c.task_status != 5
<if test="value != null and value != ''">
and c.project_id = #{value}
</if>
</select>
  (3)
java:
List<TaskStatus> callTasks = service.queryStatusByProjectId(projectId);
debug时发现callTasks.size()=1,但是值却是null,最后搞了半天才发现原来(1)中<select>标签的resultType属性使⽤错误,改成
resultMap即可
  究其原因是,MyBatis中在查询进⾏select映射的时候,返回类型可以⽤resultType,也可以⽤resultMap,resultType是直接表⽰返回类
型的,⽽resultMap则是对外部resultMap标签的引⽤(如本例中的(1)),但是resultType跟resultMap不能同时存在。在MyBatis进⾏查询
映射的时候,其实查询出来的每⼀个属性都是放在⼀个对应的Map⾥⾯的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是
resultType的时候,MyBatis会将Map⾥⾯的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每⼀个查询映射的返
回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对⾃动的给我们把对应的值赋给resultType所指定对
象的属性,⽽当我们提供的返回类型是resultMap的时候,因为Map不能很好表⽰领域模型,我们就需要⾃⼰再进⼀步的把它转化为对应的
对象,这常常在复杂查询中很有作⽤。(包括如本例中的表关联查询等等情况)
  终上所述,本例中错误的原因在于已经⾃定义了<resultMap>中id为monitorTaskStatusMap的结果集,⽽需求也是要引⽤这个,正确的
是应该⽤resultMap指定,我却⽤了resultType。。。  
  最后可以简要概括两点:
1.当进⾏单表简单查询时且返回值类型是基本类型时,⼀般尽量使⽤resultType;
2.当进⾏表关联查询时,或者说xml中定义了相关的resultMap标签,那么就⼀般尽量使⽤resultMap;
3.resultType和resultMap不能同时使⽤。
--------------------------------------------------------
作者:日太光明初之010
链接:https://wenku.baidu.com/view/5bac99074b2fb4daa58da0116c175f0e7dd1194b.html
来源:百度文库
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:MyBatis,batch,resultMap,查询,resultType,sql,mybatis,null,属性
来源: https://www.cnblogs.com/jingzaixin/p/16389529.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有