mybatis-plus 常见的绑定错误解决方案

mybatis-plus 常见的绑定错误解决方案

文章目录

  • mybatis-plus 常见的绑定错误解决方案
    • 解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
      • 1. xml 文件配置问题
      • 2. application 的配置问题
      • 3. mybatis-plus mapper扫描配置问题
        • 方案一:
        • 方案二:
        • 方案三:
      • 4. 是否使用功能的mybatis-plus
    • 解决 Result Maps collection already contains value for xxx

比较长见到的几个绑定错误:

  • org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • Result Maps collection already contains value for xxx

解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

这个异常出现的原因有蛮多的, 不过最终都是一个最本质的原因就是映射关系不对或者没找到

1. xml 文件配置问题

xml中注意三个地方

  1. namespace: 是否正确指向的 mapper 文件
  2. resultMap: 是否正确指向你的数据库实体类
  3. parameterType: 每个方法中的 parameterType 是否都指向对应的参数实体

2. application 的配置问题

application.properties 中加上 mapper 以及 xml 的路径配置

  • properties 版本
mybatis-plus.mapper-locations=classpath:/mapper/mysql/*.xml
mybatis-plus.type-aliases-package=com.wang.mapper.mysql
  • yaml 版本
mybatis-plus:
    mapper-locations: classpath:/mapper/mysql/*.xml
    type-aliases-package: com.wang.mapper.mysql

3. mybatis-plus mapper扫描配置问题

方案一:

可以新建一个 mybatis_plus.java 类来专门配置扫描地址
类上加上注解(我个人比较推荐这种)

@Configuration
@MapperScan(value = {"com.wang.a.mapper.mysql", "com.wang.b.mapper.mysql"})

方案二:

在系统启动类上加上注解

@MapperScan(value = {"com.wang.a.mapper.mysql", "com.wang.b.mapper.mysql"})

注意: @MapperScan 这个注解要在 @SpringBootApplication 上面, 否者可能会无效

方案三:

在每个 mapper 文件上加上 @mapper 扫描注解
告诉框架这些是数据库接口类(前提是mapper所在的包路径有在spring的扫描范围)

4. 是否使用功能的mybatis-plus

这个是比较尴尬的一个问题, 我把一个没用 mybatis-plus 的项目加入 mybatis-plus, 然后搞了老半天都没搞定, 后面发现以前是用自己的驱动类做的数据库连接, mybatis-plus 是基于 spring 的那套数据库连接方式(配置中的数据库配置以 spring.xxx开头的)

解决 Result Maps collection already contains value for xxx

这个错误比较简单, 只要检查下 xxxMapper.xml 文件的内容就好了
主要是 resultMap 或者是方法有重名导致的
使用 mybatis 代码生成工具多次的话容易导致 xml 中有重复的 ResultMap 或方法

[外链图片转存失败(img-BNSOwei9-1565335079431)(https://tool.lu/netcard/)]

你可能感兴趣的:(数据库,java,java,数据库)