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;

返回结果

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

(0)

相关推荐

  • mybatis-plus IdWorker生成的Id和返回给前台的不一致的解决

    问题描述 今天在公司项目中修改id的生成策略为mybatis-plus自带的IdWorker策略时,发现返回给前台的id竟然和数据库不一致.费解得很呐. package net.mshome.twisted.tmall.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatis

  • 深入理解Mybatis中的resultType和resultMap

     一.概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在. 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值. ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给

  • MyBatis查询结果resultType返回值类型的说明

    一.返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值. mapper 接口: // 根据 id 获得数据库中的 username 字段的值 String getEmpNameById(Integer id); SQL 映射文件: <!-- 指定 resultType 返回值类型时 String 类型的, string 在这里是一个别名,代表的是 java.lang.String 对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 'hashmap' 基本数

  • Mybatis中的resultType和resultMap查询操作实例详解

    resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题.比如:列名和对象属性名不一致时可以使用resultMap来配置:还有查询的对象中包含其他的对象等. MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura

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

    mybatis方法返回泛型与resultType不一致 当xxxMaaper.java的方法返回值类型是List<A>,而xxxMappper.xml中对应的sql的resultType指定为B对象,这样是不会包错的(即使A与B不存在关系) 原因分析: 1.集合对象原本就是存储对象,可以是不同的对象List 2.直接处理List类型常常会出现类型转换异常,jdk5出现泛型,使得程序员向list中存放相同类型对象 3.泛型作用于编译阶段,仅为了防止类型混乱而出现,类型转换异常 4.mybatis

  • mybatis中insert返回值为1,但数据库却没有数据

    今天在利用Mybatis框架进行数据库插入时,遇到了好几个超级奇怪的问题,也可能是我真的太菜鸡了.做个记录吧~ 1. 排除数据库中表设置错误 使用show variables like '%autocommit%';查看表是否设置自动提交 autocommit已经设置为on,无问题 2. 检查测试类代码 Test.java import entity.Data; import org.apache.ibatis.io.Resources; import org.apache.ibatis.ses

  • Android中findViewById返回为空null的快速解决办法

    [问题描述] Android中如下代码: LinearLayout groupPollingAddress = (LinearLayout)findViewById(R.layout.fragment_field_list); 返回为null. [解决过程] 1.参考: android – getActivity().findViewById(R.layout.contacts_list_view) returns null – Stack Overflow AndroidGUI27中findV

  • MyBatis中使用$和#所遇到的问题及解决办法

    在上篇文章给大家介绍了Mybatis中#{}和${}传参的区别及#和$的区别小结,如果大家有需要可以参考下. $和#简单说明: #相当于对数据 加上 双引号,$相当于直接显示数据. 一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态SQL进行处理的.在动态 SQL 解析

  • MyBatis中模糊查询使用CONCAT('%',#{str},'%')出错的解决

    目录 模糊查询使用CONCAT('%',#{str},'%')出错 原因及解决 MyBatis like模糊查询,CONCAT函数用法 以MySQL为例 模糊查询使用CONCAT('%',#{str},'%')出错 原因及解决 经过我一套乱七八糟毫无思路地查找后,发现不是Mybatis的原因,原来是SQL server不支持CONCAT函数,直接用加号连接就好 MyBatis like模糊查询,CONCAT函数用法 以MySQL为例 <select id="getByPage"

  • 解决mybatis中resultType取出数据顺序不一致的问题

    目录 mybatis resultType取出数据顺序不一致 解决方法 mybatis中resultType问题 mybatis resultType取出数据顺序不一致 之前做一个页面的动态表格,希望表格的列能根据数据库查出来的数据保持一致,但是返回页面的结果集是无序的在网上查了一下原因. 原来我的查询返回resultType = "map",也就是这个map,打乱了顺序.因为map并不能保证存入取出数据一致. 解决方法 <select id="test" r

  • MyBatis中insert操作返回主键的实现方法

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle.DB2,可以采用如下配置方式: <insert id="add" parameterType="vo.Category"> <selectKey resultType="

  • Mybatis查询语句返回对象和泛型集合的操作

    Mybatis查询语句返回对象和泛型集合 EmpMapper映射接口: package cn.et.mybatis.lesson03; import java.util.List; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; public interface EmpMap

  • Mybatis中ResultMap解决属性名和数据库字段名不一致问题

    目录 前言 1. 字段名不一致 解决方法: 第一种方式: 起别名 第二种方式: 结果集映射 resultMap 2. 多对一处理 3. 一对多处理 小结 前言 我们Pojo类的属性名和数据库中的字段名不一致的现象时有发生,简单的情况我们可以开启驼峰命名法解决大小写问题,但是遇到其它非大小写问题,我们就不得不使用Mybatis中的结果集映射resultMap. 1. 字段名不一致 数据库中的字段 我们项目中实体类的字段 public class User { private int id; pri

随机推荐