本文来说下有关Mybatis的几种传参方式

文章目录

  • 概述
  • 单个参数
  • 多个参数
    • 使用索引【不推荐】
    • 使用@Param
    • 使用Map
    • POJO【推荐】
  • List传参
  • 数组传参
  • 本文小结

概述

本文说下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>

测试如下:

 @Testvoid 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=1and 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=1and user_id in<foreach collection="array" item="item" open="(" separator="," close=")" >#{item}</foreach>
</select>

本文小结

本文详细介绍了Mybatis的几种传参方式。

Mybatis的几种传参方式相关推荐

  1. mybatis参数有list和实体类_Mybatis的几种传参方式,你了解吗?

    目录 前言 单个参数 多个参数 使用索引[不推荐] 使用@Param 使用Map POJO[推荐] List传参 数组传参 总结 前言 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Myba ...

  2. PHP基础传参,PHP四种传参方式

    test1界面: testPHP //第一种设置传参方式,通过cookie setcookie('my','yefeng'); //第二种传参方式,通过设置服务器session值传递参数 sessio ...

  3. vuerouter3种模式_Vue-router的三种传参方式

    第一种传递参数:name传参 两步完成name传参并显示在模板中: 第一在router/index.js中配置name属性, routes: [ { path: '/', name: 'HelloWo ...

  4. Struts2三种传参方式(从jsp页面传到Action)

    多的不说,直接上代码;struts.xml代码:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...

  5. Jsp页面的几种传参方式

    Jsp页面的几种传参方式 1.JavaScript传参:这种传参方式用opener关键字, 可以实现跨页传参.其用法就是用opener关键字调用父窗体的一个组件. 举例:    opener.myfo ...

  6. C++中vector作为参数的三种传参方式

    此文章转载自:http://www.cnblogs.com/xiaoxi666/p/6843211.html c++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维ve ...

  7. requests 两种传参方式

    post方式传参使用 requests.get(url=url, data=params) get方式传参使用 requests.get(url=url, params=params)

  8. mybatis传入数组怎么写_推荐的MyBatis传参方式List、数组等

    MyBatis 推荐的传参方式 如果要详细的学习 MyBatis,推荐看这个教程:https://www.w3cschool.cn/mybatis/ 1. 单个参数//接口方法int getAgeBy ...

  9. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

最新文章

  1. 解决windows图片查看器背景色变成米黄色
  2. 程序物语(四):苹果是如何落到牛顿头上的?
  3. 如何删除 Windows.old 文件夹
  4. Scala多线程:使用Executors提交Callable任务代码示例
  5. 安卓实训项目源码_综合性项目:在线学习考试系统
  6. django 搜索
  7. 回文子串—leetcode647
  8. Java集合—PriorityQueue底层原理
  9. 牛客题霸 [有关阶乘的两个问题1] C++题解/答案
  10. 漫画:如何实现大整数相加
  11. AD7124-4调试经验分享
  12. 通过H5(浏览器/WebView/其他)唤起本地app
  13. Hadoop Yarn Linux Container Executor配置
  14. Android 各版本对应的SDK版本
  15. AWB——Complementarity-enhanced Mutual Networks for Unsupervised Domain Adaptation in Person Re-ID
  16. 详细指南!手把手教你上手Tableau软件!
  17. html加载完成 产生动作,页面加载功能设计总结
  18. 9-2分布迭代次数的15个梯度
  19. 一文读懂MEMS技术4大主要分类及应用领域
  20. error: can‘t create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)

热门文章

  1. Educational Codeforces Round 20 B. Distances to Zero
  2. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
  3. docker高级应用之智能添加与修改防火墙规则
  4. Spark API编程动手实战-08-基于IDEA使用Spark API开发Spark程序-01
  5. Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程
  6. AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
  7. 并发编程-Atomic的compareAndSet
  8. 高可用集群HA之双机集群
  9. mutable和volatile关键字
  10. UCF 大牛 Prof. Shah 课题组代码合集