mybatis中方法返回泛型与resultType不一致的解决

 更新时间:2021年07月30日 12:05:40   作者:孙艳强  
这篇文章主要介绍了mybatis中方法返回泛型与resultType不一致的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis方法返回泛型与resultType不一致

当xxxMaaper.java的方法返回值类型是List<A>,而xxxMappper.xml中对应的sql的resultType指定为B对象,这样是不会包错的(即使A与B不存在关系)

原因分析:

1.集合对象原本就是存储对象,可以是不同的对象List

2.直接处理List类型常常会出现类型转换异常,jdk5出现泛型,使得程序员向list中存放相同类型对象

3.泛型作用于编译阶段,仅为了防止类型混乱而出现,类型转换异常

4.mybatis结果集封装bean时采用反射,是在运行时进行的,此时再看泛型容易进入误区

实例:

public class A
}
public class B{
}
@Service()
public class AImpl implements AService {
private AMapper  aMapper ;
public List<B> increTrade(Map<String, Object> map) {
List<B> lst =aMapper.increTrade(map); //这里debug看到list是A类型,此时泛型误导人
return lst;
}
}
public interface AMapper {
List<B>increTrade(Map<String, Object> map);
}

AMapper 对应的xml文件

<select id="increTrade" parameterType="java.util.Map" resultType="cn.easier.admin.model.A">
//-------------
</select>

List中map泛型对应mybatis的返回类型

List<Map<String,Object>>在mybatis对应

resultType="java.util.HashMap"
</select>
  <select id="selectExceptionCountBymonths" resultType="java.util.HashMap"  >
SELECT
 DATE_FORMAT( report_date, '%Y%m' ) label ,
 COUNT( 0 ) value
FROM
 t_smoke_detector_record
 WHERE tsdr_type != "火灾告警"
GROUP BY
 label
 
  </select>
@ApiOperation(value = "按照月份统计报警条数",notes = "按照月份统计报警条数")
@GetMapping(value = "warnCountStatistics")
@ActionLog(value = "按照月份统计所有报警条数")
    public  List<Map<String,Object>>  warnCountStatistics(){
        List list = smokeDetectorRecordMapper.selectWarnCountBymonths();
        return list;

返回结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 中单例模式饿汉式与懒汉式的对比

    java 中单例模式饿汉式与懒汉式的对比

    这篇文章主要介绍了java 中单例模式饿汉式与懒汉式的对比的相关资料,这里对这两种单例模式进行对比,希望大家能理解并应用,需要的朋友可以参考下
    2017-08-08
  • MyBatis/mybatis-plus项目打印SQL的方法实现

    MyBatis/mybatis-plus项目打印SQL的方法实现

    SpringBoot项目中,经常需要打印SQL语句及其参数,本文就来介绍一下MyBatis/mybatis-plus项目打印SQL的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 解决java main函数中的args数组传值问题

    解决java main函数中的args数组传值问题

    这篇文章主要介绍了解决java main函数中的args数组传值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • mybatisPlus自定义批量新增的实现代码

    mybatisPlus自定义批量新增的实现代码

    这篇文章主要介绍了mybatisPlus自定义批量新增的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java开发必备的三大修饰符

    Java开发必备的三大修饰符

    JAVA的三个修饰:static,final,abstract,在JAVA语言里无处不在,但是它们都能修饰什么组件,修饰组件的含义又有什么限制,总是混淆.所以来总结一下,需要的朋友可以参考下
    2021-06-06
  • MybatisPlus结合groupby实现分组和sum求和的步骤

    MybatisPlus结合groupby实现分组和sum求和的步骤

    这篇文章主要介绍了MybatisPlus结合groupby实现分组和sum求和的步骤,这次使用的是LambdaQueryWrapper,使用QueryWrapper相对来说简单点就不写了,本文分步骤给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2023-12-12
  • Java实现五子棋(附详细源码)

    Java实现五子棋(附详细源码)

    这篇文章主要为大家详细介绍了Java实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 解决HttpServletRequest 流数据不可重复读的操作

    解决HttpServletRequest 流数据不可重复读的操作

    这篇文章主要介绍了解决HttpServletRequest 流数据不可重复读的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解Java Ajax jsonp 跨域请求

    详解Java Ajax jsonp 跨域请求

    本篇文章主要介绍了详解Java Ajax jsonp 跨域请求,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java FileDescriptor总结_动力节点Java学院整理

    Java FileDescriptor总结_动力节点Java学院整理

    FileDescriptor 是“文件描述符”。可以被用来表示开放文件、开放套接字等。接下来通过本文给大家分享Java FileDescriptor总结,感兴趣的朋友一起学习吧
    2017-05-05

最新评论