当前位置: 首页 > 编程笔记 >

Mybatis的几种传参方式详解

宇文修筠
2023-03-14
本文向大家介绍Mybatis的几种传参方式详解,包括了Mybatis的几种传参方式详解的使用技巧和注意事项,需要的朋友参考一下

前言

  • 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗?
  • 没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式。
  • 于是这篇文章就来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下。

单个参数

单个参数的传参比较简单,可以是任意形式的,比如#{a}、#{b}或者#{param1},但是为了开发规范,尽量使用和入参时一样。

Mapper如下:

UserInfo selectByUserId(String userId);

XML如下:

<select id="selectByUserId" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=1
 </select>

多个参数

多个参数的情况下有很多种传参的方式,下面一一介绍。

使用索引【不推荐】

  • 多个参数可以使用类似于索引的方式传值,比如#{param1}对应第一个参数,#{param2}对应第二个参数.......
  • Mapper方法如下:
UserInfo selectByUserIdAndStatus(String userId,Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{param1} and status=#{param2}
 </select>

注意:由于开发规范,此种方式不推荐开发中使用。

使用@Param

@Param这个注解用于指定key,一旦指定了key,在SQL中即可对应的key入参。

Mapper方法如下:

UserInfo selectByUserIdAndStatus(@Param("userId") String userId,@Param("status") Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

使用Map

Mybatis底层就是将入参转换成Map,入参传Map当然也行,此时#{key}中的key就对应Map中的key。

Mapper中的方法如下:

UserInfo selectByUserIdAndStatusMap(Map<String,Object> map);

XML如下:

<select id="selectByUserIdAndStatusMap" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

测试如下:

@Test
 void contextLoads() {
  Map<String,Object> map=new HashMap<>();
  map.put("userId","1222");
  map.put("status",1);
  UserInfo userInfo = userMapper.selectByUserIdAndStatusMap(map);
  System.out.println(userInfo);
 }

POJO【推荐】

多个参数可以使用实体类封装,此时对应的key就是属性名称,注意一定要有get方法。

Mapper方法如下:

UserInfo selectByEntity(UserInfoReq userInfoReq);

XML如下:

<select id="selectByEntity" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

实体类如下:

@Data
public class UserInfoReq {
 private String userId;
 private Integer status;
}

List传参

List传参也是比较常见的,通常是SQL中的in。

Mapper方法如下:

List<UserInfo> selectList( List<String> userIds);

XML如下:

<select id="selectList" resultMap="userResultMap">
  select * from user_info where status=1
  and user_id in
  <foreach collection="list" item="item" open="(" separator="," close=")" >
   #{item}
  </foreach>
 </select>

数组传参

这种方式类似List传参,依旧使用foreach语法。

Mapper方法如下:

List<UserInfo> selectList( String[] userIds);

XML如下:

<select id="selectList" resultMap="userResultMap">
  select * from user_info where status=1
  and user_id in
  <foreach collection="array" item="item" open="(" separator="," close=")" >
   #{item}
  </foreach>
 </select>

总结

到此这篇关于Mybatis的几种传参方式详解的文章就介绍到这了,更多相关Mybatis传参方式内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍浅谈React Native 传参的几种方式(小结),包括了浅谈React Native 传参的几种方式(小结)的使用技巧和注意事项,需要的朋友参考一下 在React Native 中由于业务的需要, 我们往往要在诸多的页面间,组件之间做一些参数的传递与管理, 在这里我总结了几大经过验证,稳定好用的方式给大家 React Navigation 导航传值 推荐指数: ♥ ♥ ♥ ♥ ♥

  • 本文向大家介绍详解Spring中bean的几种注入方式,包括了详解Spring中bean的几种注入方式的使用技巧和注意事项,需要的朋友参考一下 首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入。依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。 Spring容器中支持的依赖注入方式主要有属性注入、构造函数注入、工

  • 本文向大家介绍用 Python 连接 MySQL 的几种方式详解,包括了用 Python 连接 MySQL 的几种方式详解的使用技巧和注意事项,需要的朋友参考一下 尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要

  • 本文向大家介绍python线程的几种创建方式详解,包括了python线程的几种创建方式详解的使用技巧和注意事项,需要的朋友参考一下 Python3 线程中常用的两个模块为: _thread threading(推荐使用) 使用Thread类创建 说明:主线程会等待所有的子线程结束后才结束 使用Thread子类创建 为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子

  • 本文向大家介绍详解Mysql导出数据的几种方式,包括了详解Mysql导出数据的几种方式的使用技巧和注意事项,需要的朋友参考一下 MySQL导出数据的目的有很多种,如数据库备份、表结构导出、表数据导出、分析数据采取等。 Part1 select into outfile 先说最短小精悍的select into outfile, 这是小型数据库分析数据最常用的采集数据方式,具体语法如下: 【selec

  • 本文向大家介绍Lua中table的几种构造方式详解,包括了Lua中table的几种构造方式详解的使用技巧和注意事项,需要的朋友参考一下 之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了。 基础数据类型、表达式、循环结构什么的我就不说了,这么简单的东西说了也要被大家喷。 今天我想说说table的几种构造方式。 0.Lua