mybatis mapper互相引用resultMap启动出错的解决

目录
  • mybatis mapper互相引用resultMap启动出错
    • 问题
    • 原因
    • 解决方法
  • mybatis resultMap引发的吐血bug
    • 简单的讲
    • 以下是详细的
    • 利用mybatis读取数据时,发生不可理解的事情

mybatis mapper互相引用resultMap启动出错

问题

Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for kulink.cvscloud.core.mapper.OrderSundryMapper.BaseResultMap
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:888) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.session.Configuration.getResultMap(Configuration.java:640) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.builder.MapperBuilderAssistant.getStatementResultMaps(MapperBuilderAssistant.java:344) ~[mybatis-3.4.5.jar:3.4.5]

... 73 common frames omitted

原因

因为mybatis扫描加载的时候,是按顺序加载的A-Z,因为mapperA中引用mapperB中的ResultMap

但是启动加载的时候mapperB加载在mapperA之后,所以造成mapperB.ResultMap找不到的问题。

解决方法

升级新版本,已经解决这个问题了

或者在引用mapper.xml中把resultMap直接复制过来

mybatis resultMap引发的吐血bug

简单的讲

问题背景:如果在写mybatis中的resultMap时,不下心将resultMapde id写成映射接口的名字,会发生什么?

结论:单元测试进度条卡住但不报错, Tomcat运行不报错,但是不加载项目

以下是详细的

需求:从数据库中加载之前插入log日志,打印在某一页面上。

如:

Java中的pojo:

package pojo;
import java.io.Serializable;
import java.util.Date;
/**
 * 系统日志
 *
 * @author Administrator
 */
public class Log implements Serializable {
    private static final long serialVersionUID = -7372303516713218870L;
    private int id;//
    private int userId;//
    private String userName;
    private Date createDate;//创建日期
    private String content;//日志内容
    private String operation;//用户所做的操作
    private String url;//用户所做的操作
    public Log() {
    }
    public Log(int id, int userId, String userName, Date createDate, String content, String operation, String url) {
        this.id = id;
        this.userId = userId;
        this.userName = userName;
        this.createDate = createDate;
        this.content = content;
        this.operation = operation;
        this.url = url;
    }
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getOperation() {
        return operation;
    }
    public void setOperation(String operation) {
        this.operation = operation;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    @Override
    public String toString() {
        return "Log{" +
                "id=" + id +
                ", userId=" + userId +
                ", userName='" + userName + '\'' +
                ", createDate=" + createDate +
                ", content='" + content + '\'' +
                ", operation='" + operation + '\'' +
                ", url='" + url + '\'' +
                '}';
    }
}

利用mybatis读取数据时,发生不可理解的事情

public List<Log> listAll();
    <resultMap id="LogMapper" type="Log">
        <id column="userid" property="userId"/>
        <result column="username" property="userName"/>
        <result column="content" property="content"/>
        <result column="operation" property="operation"/>
        <result column="createdate" property="createDate"/>
        <result column="url" property="url"/>
    </resultMap>
    <select id="listAll"   resultMap="LogMapper">
        SELECT * FROM t_log
    </select>

程序一旦单元测试就会进入这样的状态,

无限循环,没有结束。不仅这个方法,所有的测试方法都进入这种“阻塞”的状态,关键还没有异常的提示(哭~)不仅如此,重启tomcat会进入这样

一方面tomcat不再加载项目,同时释放了几个看起来像是bug的坑,其实这些都时正常的信息,没有其他的东西!
期间重新导过jar包,删除过tomcat,重新部署项目,但只有一添加上述代码,就会崩溃。最后发现,原来和接口名字重复了,重复了。。。。。

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

(0)

相关推荐

  • 浅谈Springboot下引入mybatis遇到的坑点

    一. springBoot + Mybatis 配置完成后,访问数据库遇到的问题 首先出现这个问题,肯定是xml文件与mapper接口没有匹配上,甚至是xml文件根本没有被扫描到. 于是会从配置上进行检查: 1. xml中的namespace命名是否与mapper接口路径一致,需保证一致. 2. application.properties或者application.yml文件中配置mybatis的属性对否,如下: 第一行 typeAliasesPackage是实体类的包路径: 第二行mappe

  • MyBatis不同Mapper文件引用resultMap实例代码

    ClassesMapper.xml: <resultMap type="Classes" id="classesMap"> <id property="id" column="c_id" javaType="int"/> <result property="name" column="c_name" javaType="Stri

  • mybatis的mapper.xml中resultMap标签的使用详解

    1.前言 最近博主在做一个ssm框架的共享汽车管理系统,其中,数据库字段设计的有下划线方式,a_username,然后在写mapper.xml里面的sql语句的时候,一直出现查询语句查询的值为null的情况.或者是resultMap标签和驼峰规则不太明白的同学,可以看这里. 于是顺便梳理一下. 2.关于resultMap 2.1.什么是resultMap? 在mybatis中有一个resultMap标签,它是为了映射select查询出来结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进

  • 解决Mybatis中mapper的ID冲突问题

    mapper 的id冲突原因: 原因一: 在同一个mapper.xml中存在相同的ID 原因二: 同时使用了xml配置和注解配置 解决方案: 只保留xml或者注解即可!!! Mybatis mapper文件下同一id 查询结果列不同问题 场景描述: 订单数据按天分表,正常情况下每一天的表结构都是一样的,表名命名格式order_yyyyMMdd. 定义一个查询如下: <select id="orderSelect" parameterClass="java.util.Ha

  • mybatis mapper互相引用resultMap启动出错的解决

    目录 mybatis mapper互相引用resultMap启动出错 问题 原因 解决方法 mybatis resultMap引发的吐血bug 简单的讲 以下是详细的 利用mybatis读取数据时,发生不可理解的事情 mybatis mapper互相引用resultMap启动出错 问题 Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for kulink.cv

  • Mybatis plus中使用in查询出错如何解决

    不想看我bb的直接点上面的 ''解决方法'' 我的情况是这样的,在使用mybatis plus提供的QueryWrapper方法里的in查询时,我的参数为类似"1,2,3,4"这样的字符串 //要查的参数 String masterIds = "81554,5654,55948,48945"; QueryWrapper<FpjyPauperInfo> pauperqw = new QueryWrapper<>(); pauperqw.in(&

  • 关于mybatis mapper类注入失败的解决方案

    重新创建了一个项目,代码结构有所改变,结果在启动服务时,一直报如下错误 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating b

  • mybatis mapper.xml 区间查询条件详解

    目录 mybatis mapper.xml 区间查询条件 对 null 和 " 分开进行判断 tk mybatis通用mapper,复杂and or条件查询 方式1:Weekend语法 方式2:通用example语法 mybatis mapper.xml 区间查询条件 对 null 和 " 分开进行判断 <select id="selectByExample" resultMap="BaseResultMap" parameterType=

  • 解决mybatis一对多查询resultMap只返回了一条记录问题

    问题描述:因为领导的一个需求,需要用到使用resultMap,很久没使用了,结果就除了点意外.就记录下这个问题 准备两个类:author(作者)和book(书),数据库创建对应的author->book一对多的数据 @Data public class Author { private Integer id; private String name; private String phone; private String address; private List<Book> book

  • mybatis mapper.xml 注释带参数的坑及解决

    目录 mybatis mapper.xml 注释带参数的坑 mybatis的xml中注释需谨慎 报错内容 小结一下 mybatis mapper.xml 注释带参数的坑 最近做一个很简单的统计项目,统计的逻辑产品一直改版,为了便于之后产品返回的时候快速的切换回老版本的逻辑,就给之前的sql注释了直接在下面写了新的sql,注释的时候一般我都习惯性的选中之后Ctrl+/利用编辑器自带的自动注释功能,这个时候编辑器是分两种情况的:情况一是你之前老的sql没有类似<where>这样带特殊尖括号的语句,

  • springboot多模块化整合mybatis,mapper自动注入失败问题及解决

    目录 springboot多模块化整合mybatis,mapper自动注入失败 问题 解决 springboot mapper注入失败的一种原因 具体情况是 解决办法 springboot多模块化整合mybatis,mapper自动注入失败 问题 启动类添加@MapperScan或@ComponentScan,mapper类添加@Mapper或@Repository ==> Consider defining a bean of type 'com.ten.mapper.UserMapper'

  • Mybatis错误引起的程序启动卡死问题及解决

    目录 Mybatis错误引起的程序启动卡死 解决办法 原因分析 Mybatis启动错误 具体报错如下 主要内容是说找不到接口,问题可能有两个 Mybatis错误引起的程序启动卡死 mybatis xml 错误引起的程序启动卡死(没有任何报错信息,控制台卡死)排除方法 解决办法 把日志级别提高到debug,查看日志是否有异常信息 新建一个类,继承 org.mybatis.spring.SqlSessionFactoryBean 类,重载 buildSqlSessionFactory 方法,捕获 N

随机推荐