MyBatis学习-getMapper接口绑定方案及多参数传递

2023-11-16

一、采用接口绑定方案的作用

         创建一个接口后,MyBatis框架将mapper.xml通过反射机制生成接口的实现类,通过调用接口对象就可以获取mapper.xml中编写的sql。方便sql语句的调用,方便多个参数的传递,在未使用接口绑定方案前,传递多个参数要么是传递对象,要么是传递map。后面mybatis和spring整合时使用的是该方案。

二、实现步骤

  • 全局配置文件mybatis.xml

      <mappers>标签中使用<package>标签来配置mapper,name中的值为mapper文件所在的包名

<mappers>
    <package name="com.ccnu.mapper"/>
</mappers>
  • 新建接口

在mapper.xml文件所在包新建一个接口类,mapper.xml文件中的namespace必须和接口全限定路径(包名+类名)一致,sql语句的id值与接口中的方法名相同,返回值类型相对应,若为List类型,resultType中填写其中的泛型即可。

如果接口中方法包含多个参数,可以省略parameterType.

public interface LogMapper {

	List<Log> selAll();

	List<Log> selByAccInAccOut(String accin, String accout);
}
<mapper namespace="com.ccnu.mapper.LogMapper">
	<!-- id要与接口的方法名一致 -->
	<!-- resultType要与接口方法的返回值一致 -->
	<select id="selAll" resultType="log">
		select * from log
	</select>
	
	<!-- 当多参数时,不需要写parameterType  -->
	<!-- 基本参数类型用索引的方法来进行访问 -->
	<select id="selByAccInAccOut" resultType="log" >
		select * from log where accin=#{0} and accout=#{1}
	</select>
</mapper>

注意:在传递参数中,xml文件中sql语句获得参数时,若传递的参数类型为基本数据类型,#{}括号中使用参数的索引来进行获取,#{0}则表示第一个参数,以此类推。也可以采用@param注解的方式,把参数转换为map,其中@param("")中为key,相应的参数内容为map的value,通过该方法,mapper.xml文件中可通过key来获取相应的参数值。

List<Log> selByAccInAccOut(@param("accin") String accin,@param("accout")
	 String accout);
<select id="selByAccInAccOut" resultType="log" >
    select * from log where accin=#{accin} and accout=#{accout}
</select>
  • 访问接口对象方法

使用getMapper方法绑定接口,通过动态代理的方式得到接口的实现类,得到接口的实例化对象,再通过接口对象访问相应的方法。

LogMapper logMapper = session.getMapper(LogMapper.class);
List<Log> list = logMapper.selByAccInAccOut("1", "3");

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis学习-getMapper接口绑定方案及多参数传递 的相关文章

随机推荐

  • 深度学习部署--tensorflow 用c++调用前向

    使用TensorFlow C API构建线上预测服务 第一篇 Oct 9 2017 tensorflow 文章目录 1 使用Python接口训练模型 2 源码编译TensorFlow 3 使用TensorFlow C API编写预测代码 3
  • 线下零售场景的消费者商品场景终端数字升级

    按照识别的精度排序 确实是虹膜 指纹 人脸的识别精度依次降低 但人脸识别可以根据摄像头的提升而提升 双目摄像头 结构光摄像头 TOF等等 这个上升空间很大 从应用性来看 你现在让所有的用户都去提取虹膜信息 指纹信息 这个很难 不现实 而我们
  • 微信小游戏 can't find variable: window

    最近测试微信小游戏的时候 需要加入一些SDK代码 在加入这些文件到项目并require相应的库的时候 小游戏开发者工具一直报错 can t find variable window 查找了相关资料 https developers weix
  • 逐点插入法实现 Delaunary三角网 ( 附 C++ 代码)

    逐点插入法作为一种经典的凸闭包收缩算法 其思想是 首先找到包含数据区域的最小凸包边形 并从该多边形开始从外到内形成Delaunary三角网 因此其每次插入一个新的点就会删除相应的三角形来构建性的三角网 这个过程中常常伴随着大量的查询计算过程
  • flutter 从A到B,然后在从B返回A页面,A页面刷新数据

    flutter 从A到B 然后在从B返回A页面 A页面刷新数据实现代码如下 Navigator push context MaterialPageRoute builder context gt NoticePage then value
  • 解决java.lang.IllegalArgumentException: Could not resolve placeholder xx.xx.addr 的问题,思路:一定是配置文件问题

    今天启动SpringBoot遇到一个问题 提示 java lang IllegalArgumentException Could not resolve placeholder xx xx addr in value xx xx addr
  • pytorch源码解读——RNN/LSTM篇

    文章的字母中 b batch size t time step n num feature h hidden size 假设输入数据维度input b t n 所设计的LSTM模型如下 class MYLSTM nn Module def
  • OkHttpUtils 下载上传文件

    目录 一 使用时需要先添加依赖 build gradle文件中 二 使用注意事项 三 OkHttpUtils 目前支持 3 1 统一的文件下载管理 DownloadManager 3 2 统一的文件上传管理 UploadManager 四
  • 硬链接与软连接:

    磁盘文件简单的一个框架图 磁盘里的文件系统如何管理 将磁盘划分成几个区域 前面是磁盘信息 第一个区域 放的是超级块 第二个区域 是inode 在磁盘上每创建一个文件 就会对应一个inode的结构体 第三个区域 目录项 目录项分为两项 第一项
  • linux下oracle启动过程

    在linux下启动oracle 和在windows是有差别的 对于一般在windows下操作习惯人有很多不适应 所以我特别写这样文章 以方便新手进行操作 下面就一步一步讲解启动过程 1 通过终端连接到linux服务器 当然这样的软件很多例如
  • 腾讯T2亲自教你!2021年Android工作或许更难找,送大厂面经一份!

    近日一好友去阿里面试 面试失败了 分享了一个他最不擅长的算法面试题 题目是这样的 题目 给定一个二叉搜索树 BST 找到树中第 K 小的节点 出题人 阿里巴巴出题专家 文景 阿里云 CDN 资深技术专家 参考答案 考察点 基础数据结构的理解
  • tronweb 波场导入助记词生成地址

    创建助记词 let tronWeb require tronweb let mne tronWeb createRandom 导入助记词 let tronWalletImport tronWeb fromMnemonic m m 44 19
  • echarts laben 饼图指示线条+文字颜色继承

    注意 label并不支持HTML片段 版本5 30 label show true alignTo edge position outside formatter name b n time c 小时 formatter b b n cst
  • Vue3挂载全局方法及组件中如何使用

    文章目录 前言 一 在mian ts mian js 中配置全局变量 1 如何封装 二 如何调用 1 template中调用 2 在script标签中如何拿到 前言 在Vue3项目中 需要频繁使用某一个方法 配置到全局感觉会方便很多 例如
  • Nodejs中electron IpcMain & IpcRenderer通信

    1 事情起因 原因是本人在使用nedb数据库进行数据插入的时候 发现莫名其妙多出了很多很多的数据 很容易想到 那么就是插入语句被调用了N多次 并且每一次插入的数据都是之前已经插入过的数据 比如说第一次插入的是 id 1 name xx 第二
  • MongoDB 聚合

    MongoDB 聚合有什么用 实际项目中 我们经常需要将多个文档甚至是多个集合汇总到一起计算分析 比如求和 取最大值 并返回计算后的结果 这个过程被称为 聚合操作 根据官方文档介绍 我们可以使用聚合操作来 将来自多个文档的值组合在一起 对集
  • 我赌你不懂系列:char占几个字节

    前言 我百度搜索 char占几个字节 得到下面的答案 image png char用于C或C 中定义字符型变量 只占一个字节 取值范围为 128 127 27 27 1 char类型占1字节 就是8位 所能存储的正整数是 0111 1111
  • linux status文件,linux的 functions之status函数详解

    检测一个二进制可运行程序是否运行 使用方法 status p pidfile program status local base pid pid file Test syntax 测试调用该函数时的参数格式 if 0 then echo U
  • Mpvue-echarts发布自定义事件

    引入库 npm install mpvue echarts 直接上源码
  • MyBatis学习-getMapper接口绑定方案及多参数传递

    一 采用接口绑定方案的作用 创建一个接口后 MyBatis框架将mapper xml通过反射机制生成接口的实现类 通过调用接口对象就可以获取mapper xml中编写的sql 方便sql语句的调用 方便多个参数的传递 在未使用接口绑定方案前