解决Mybatis中mapper的ID冲突问题

mapper 的id冲突原因:

原因一:

在同一个mapper.xml中存在相同的ID

原因二:

同时使用了xml配置和注解配置

解决方案:

只保留xml或者注解即可!!!

Mybatis mapper文件下同一id 查询结果列不同问题

场景描述:

订单数据按天分表,正常情况下每一天的表结构都是一样的,表名命名格式order_yyyyMMdd。

定义一个查询如下:

<select id="orderSelect" parameterClass="java.util.HashMap" resultClass="com.xxx">
    select * from order_$table_suffix$
    where ...
</select>

如果我查询18年10月1日数据,则传参数table_suffix=20181001,如果我查询18年10月2日数据,则传参数table_suffix=20181002.即可。

系统运行了若干天,到了18年12月30日,order表添加了新的字段a。以后的订单表都会添加该字段。对应的实体类也添加了对应字段。应该没有问题了,更新并重启程序。先查询今天的数据,没有问题。在查询之前的数据,发现程序报错了,找不到字段a.

解决方法:

修改id 为orderSelect 的查询

<select id="orderSelect" remapResults="true" parameterClass="java.util.HashMap" resultClass="com.xxx">
    select * from order_$table_suffix$
    where ...
</select>

对比发现添加了 remapResults="true"的配置

总结 :

mybatis 默认remapResults属性为false,会导致同一查询id 查出来的字段一直都是固定的。设置为true的话,则每次查询查出来的列可以不相同,这样才能应对不同的表结构。

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

(0)

相关推荐

  • 解决mybatis中的mapper命名问题

    mybatis mapper命名问题 mapper文件中id命名最好首字母小写,避免让mybatis认为是一个类 <!--获取供应商列表--> <resultMap id="ProviderList" type="Provider"> <result property="id" column="id"/> <result property="proCode" col

  • tk.mybatis如何扩展自己的通用mapper

    tk.mybatis扩展自己的通用mapper 目的:tk.mybatis 提供的通用mapper,虽然使用方便,不过在有些sql还是不能满足我们的需要的,而且我们希望对于deleted语句进行管控(因为通用mapper提供的都是物理删除,有时我们对一些敏感数据只能进行逻辑删除),因此我们将基于原有的通用mapper进行自己的扩展 1 jar引入 <!-- 非springboot --> <dependency> <groupId>tk.mybatis</grou

  • 解决Mybatis查询方法selectById()主键不一致问题

    Mybatis-plus的通用mapper为我们封装了很多方法,我们只需要将interface集成BaseMapper就可以.在BaseMapper中分装了一个方法=>selectById() selectById 这个方法是根据主键id进行查询记录的.返回一条记录.测试如下, 最终调用的是这个方法userDiamondMapper这个接口集成了BaseMapper. 注意这个表的主键就是uid,查询试试 返回结果不如我们预期,打印出的SQL很奇怪,并没有解析正确.猜测是因为无法正确解析出主键.

  • 解决springboot集成swagger碰到的坑(报404)

    一:项目使用springboot集成swagger进行调试 配置swagger非常简单,主要有三步: 1.添加swagger依赖 <!-- 引入 swagger等相关依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> <

  • 解决springdataJPA对原生sql支持的问题

    springdataJPA对原生sql支持问题 在项目中用到的是springdataJPA连接数据库进行操作,但是JPA中的hql语句不能够满足业务要求,因而需要用到原生sql 但是有一个问题: @Query(value = "SELECT ppd.* FROM zt_productionplandetails AS ppd \n" + " \tLEFT JOIN zt_salesplan sp ON sp.id=ppd.salesPlan_id \n" + &qu

  • 解决tk.mybatis中写自定义的mapper的问题

    问题 使用tk.mybatis能满足大多数操作,但是想添加自己的查询方法时候今天遇到了坑,总结一下 官方教程 大致分两种 1. 使用纯接口注解方式时 在mapper接口中自定义方法上添加如@Select,@insert类似的注释,里边写相应的sql语句,如下 import org.apache.ibatis.annotations.Select; import tk.mybatis.mapper.common.Mapper; public interface CountryMapper exte

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

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

  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    最近写了几个非常简单的接口(CRUD),在单元测试的时候却出了问题,报错如下: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageListener': Unsatisfied dependency expressed through field 'reviewCheckInfoService'; nested exce

  • Mybatis中Mapper映射文件使用详解

    紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.delete.select(增删改查);cache.cache-ref.resultMap.parameterMap.sql. 下

  • 解决MyBatis中为类配置别名,列名与属性名不对应的问题

    在传参与接收返回结果的时候,咱们一直是使用的全限定名.但是MyBatis自己在使用很多类型的时候(如Integer,Boolean)却可以直接使用别名.那么,咱们自己的写的类能不能使用别名呢?可以.需要配置. mybatis配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//

  • Mybatis中Mapper标签总结大全

    一.标签分类 定义SQL语句 insert delete update select 配置关联关系 collection association 配置java对象属性与查询结果集中列名的对应关系 resultMap 控制动态SQL拼接 foreach if choose 格式化输出 where set trim 定义常量 sql 其他 include 二.标签总结 1. 基础SQL标签 1.1 查询select 标签属性 id 唯一的名称,对应dao中mapper的接口名称 paramterTy

  • 解决myBatis中删除条件的拼接问题

    今天刚刚学习了mybatis,做了简单的对数据库的增删改查.在进行删除操作时,单条删除时很简单,但是批量删除的时候拼接删除条件却有些麻烦,现记录一下做法. Sql语句中,当删除条件并不唯一的时候,我们有两种删除的sql语句,一种使用or拼接where中的条件,例如delete from 表名where 条件1 or 条件2,另一种是使用in 例如delete from 表名where 元素in( ) 利用第一种删除语句在mybatis中的mapping.xml中进行拼接: 利用第二种删除语句在m

  • 解决mybatis 中collection嵌套collection引发的bug

    我就废话不多说了,大家还是直接看代码吧~ <resultMap id="ParentMap" type="org.example.mybatis.Parent"> <id column="Id" jdbcType="VARCHAR" property="id" /> <result column="Name" jdbcType="VARCHAR&q

  • 解决mybatis中order by排序无效问题

    1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2.$将传入的数据直接显示生成在sql中.如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order b

  • Mybatis 中Mapper使用package方式配置报错的解决方案

    踩了个坑,写出来 Mybatis 中Mapper使用package方式配置报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) UserDaoTest中调用了UserDao的insert方法. 1.项目结构如下 2.UserDao接口 package com.mybatis.dao; import org.apache.ibatis.annotations.Mapper; import

  • 解析 MyBatis 中 Mapper 生效的来龙去脉

    目录 一.MyBatis基本使用 1.1 编写配置文件 1.2 编写Mapper接口及测试方法 1.3 结果 二.源码分析 2.1 通过配置文件构建出 SqlSessionFactory 2.2 获取 SqlSession 对象 2.3 根据 SqlSession 获取 Mapper 代理 2.4 通过 Mapper 代理,执行方法操作数据库 2.5 整体流程图 最近闲了快有半个多月了,一直提不起兴致再去看一些书籍(没有以前疯狂吸食知识的欲望了

随机推荐