Mybatis的几种传参方式,你了解多少?

简介: Mybatis的几种传参方式,你了解多少?

目录

  • 前言
  • 单个参数
  • 多个参数
  • 使用索引【不推荐】
  • 使用@Param
  • 使用Map
  • POJO【推荐】
  • List传参
  • 数组传参
  • 总结

前言

  • 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过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>

总结

  • 以上几种传参的方式在面试或者工作中都会用到,不了解的朋友可以收藏下。
相关文章
|
7月前
|
XML SQL Java
Mybatis 传参方式
多个参数,那也就是使用注解@Param取名字解决即可。
41 1
|
7月前
|
XML Java 数据库连接
mybatis传参为map的写法
mybatis传参为map的写法
|
SQL XML Java
Mybatis传参类型如何确定?
最近有小伙伴在讨论#{}与${}的区别时,有提到#{}是用字符串进行替换,就我个人的理解,它的主要作用是占位,最终替换的结果并不一定是字符串方式,比如我们传参类型是整形时,最终拼接的sql,传参讲道理也应该是整形,而不是字符串的方式 接下来我们来看一下,mapper接口中不同的参数类型,最终拼接sql中是如何进行替换的
505 0
Mybatis传参类型如何确定?
|
XML Java 数据库连接
mybatis接口方法参数传参解读
mybatis接口方法参数传参解读
|
Java 数据库连接 mybatis
mybatis传参、被逗号、分割的字符串、数组传参
mybatis传参、被逗号、分割的字符串、数组传参
741 0
mybatis传参、被逗号、分割的字符串、数组传参
|
SQL Java 数据库连接
五、MyBatis获取参数值的两种方式以及传参情况
${}的本质就是字符串拼接,#{}的本质就是占位符赋值。
288 0
五、MyBatis获取参数值的两种方式以及传参情况
|
SQL XML Java
Mybatis之ParameterMap、ParameterType传参类型指定使用姿势
在使用Mybatis开发时,借助xml来写具体的sql,再写传参类型或者返回结果类型时,通常会与ParameterType, ParameterMap, ResultMap, ResultType这四个打交到,那么这个Type与Map到底怎么区别,什么时候要指定类型,什么时候又可以不指定呢?
2167 0
Mybatis之ParameterMap、ParameterType传参类型指定使用姿势
|
SQL XML Java
SpringBoot + Mybatis系列之传参作为字段/表名时的注意事项
今天遇到一个非常有意思的事情,一个小伙伴反馈,同样的 sql,为啥直接通过 mysql 终端执行的结果,和 mybatis 的执行结果不一致,感觉有点鬼畜;然后看了一下,发现这是个比较典型的问题,#{}与${}的使用区别 接下来我们看一下这个问题,顺带也重新学习一下它们两的区别
425 0
SpringBoot + Mybatis系列之传参作为字段/表名时的注意事项
|
XML SQL 安全
Mybatis传参的方式总结
mybatis传参的几种方式?
182 0
|
XML SQL Java
Mybatis 传参的各种姿势,看这一篇就足够
Mybatis 传参的各种姿势,看这一篇就足够
212 0