首页 > 其他分享 >Mybatis框架的mapper接口中的方法名可以重载吗

Mybatis框架的mapper接口中的方法名可以重载吗

时间:2023-03-07 11:45:15浏览次数:37  
标签:mapper 标签 接口 重载 Mybatis 方法

关于mybatis框架的mapper接口中的方法名是否可以重载

答案是不可以重载

为什么是不可以重载?

这个就要从Mybatis框架中mapper接口的工作原理说起

Mybatis中mapper接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为mapper接口生成对应的代理对象,代理对象会拦截接口方法,然后根据全路径名+方法名的策略将这个字符串保存。例如一个mapper接口的全路径为:com.dao.TestMapper,方法名:findById,全路径名+方法名:com.dao.TestMapper.findById;

Mybatis中mapper.xml映射文件中的select、insert、update、delete标签会被解析成一个个MapperStatement对象,对象名称就是mapper.xml文件中的namespace的值+标签中的id的值。例如一个mapper.xml映射文件中的namesapce的值为:com.dao.TestMapper,标签<select id="findById">;那这个标签的MapperStatement对象名称就是:com.dao.TestMapper.findById;

动态代理对象根据保存的接口全路径名+方法名的字符串反射调用到对应的MapperStatement对象,并执行其sql,并将执行结果返回。

简单来说就是接口全路径+接口方法名与映射文件中namespace值+标签的id值是一一对应。mapper.xml映射文件标签的id是不能出现重复的,即id值唯一,如果接口中的方法出现重载,那么就会导致传入的参数与匹配的标签sql中的参数不一致,致使执行sql时报错。

 

标签:mapper,标签,接口,重载,Mybatis,方法
From: https://www.cnblogs.com/alittlehand/p/17187293.html

相关文章

  • MybatisPlus多表连接查询
    一、(一)背景内容软件应用技术架构中DAO层最常见的选型组件为MyBatis,熟悉MyBatis的朋友都清楚,曾几何时MyBatis是多么的风光,使用XML文件解决了复杂的数据库访问的难题。时至......
  • postgresql + mybatis传入时间参数的问题
    在使用mybatis传入日期参数进行动态时间判断的时候,如果传入参数为String,使用mybatis时,在mapper中以下几种写法是错误的<iftest="query.beginDate!=nullandquer......
  • 三天吃透mybatis面试八股文
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......
  • 13_MyBatis
    MyBatis1.什么是MyBatis?是一款优秀的持久层框架,用于简化JDBC开发持久层负责将数据保存到数据库的那一层代码javaee三层架构:表现层,业务层,持久层框架:半成品软件,是......
  • 【Mybatis】【SQL执行过程】【二】Mybatis源码解析-Mapper代理执行逻辑
    1 前言上节我们回顾了下Mapper接口的解析存放以及代理的入口和创建代理的过程,那么这节我们就来看下MapperProxy的代理执行逻辑。2 源码分析2.1 invoke代理逻......
  • Mybatis中的resultMap理解
    在xml文件中写SQL语句,若只是单独用到一张表,一般用resultType就够了,对于下划线和驼峰形式的转换一般在框架内配置一下即可实现;但是在实际操作过程中往往会涉及到多表操作,一......
  • mybatis-plus返回json数据不出来
      使用 autoResultMap属性值,自动映射json类型  @TableName(opensnewwindow)描述:表名注解,标识实体类对应的表使用位置:实体类 @TableName("sys_user"......
  • Oracle使用MyBatis插入一条数据自动递增主键并返回主键值
    前期准备--创建t_table表createtablet_user(idnumber(10)primarykey,namevarchar2(20),agenumber(3));commentontablet_useris'用户信息表';......
  • C++重写(覆盖)、重载、重定义、多态
    引用:https://www.cnblogs.com/DannyShi/p/4593735.html1重写(覆盖)overrideoverride是重写(覆盖)了一个方法,以实现不同的功能。一般用于子类在继承父类时,重写(覆盖)父类......
  • Mybatis映射文件配置
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernam......