Mybatis的几种传参方式
本文来说下有关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的几种传参方式相关推荐
- mybatis参数有list和实体类_Mybatis的几种传参方式,你了解吗?
目录 前言 单个参数 多个参数 使用索引[不推荐] 使用@Param 使用Map POJO[推荐] List传参 数组传参 总结 前言 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Myba ...
- PHP基础传参,PHP四种传参方式
test1界面: testPHP //第一种设置传参方式,通过cookie setcookie('my','yefeng'); //第二种传参方式,通过设置服务器session值传递参数 sessio ...
- vuerouter3种模式_Vue-router的三种传参方式
第一种传递参数:name传参 两步完成name传参并显示在模板中: 第一在router/index.js中配置name属性, routes: [ { path: '/', name: 'HelloWo ...
- Struts2三种传参方式(从jsp页面传到Action)
多的不说,直接上代码;struts.xml代码:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...
- Jsp页面的几种传参方式
Jsp页面的几种传参方式 1.JavaScript传参:这种传参方式用opener关键字, 可以实现跨页传参.其用法就是用opener关键字调用父窗体的一个组件. 举例: opener.myfo ...
- C++中vector作为参数的三种传参方式
此文章转载自:http://www.cnblogs.com/xiaoxi666/p/6843211.html c++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维ve ...
- requests 两种传参方式
post方式传参使用 requests.get(url=url, data=params) get方式传参使用 requests.get(url=url, params=params)
- mybatis传入数组怎么写_推荐的MyBatis传参方式List、数组等
MyBatis 推荐的传参方式 如果要详细的学习 MyBatis,推荐看这个教程:https://www.w3cschool.cn/mybatis/ 1. 单个参数//接口方法int getAgeBy ...
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...
最新文章
- 解决windows图片查看器背景色变成米黄色
- 程序物语(四):苹果是如何落到牛顿头上的?
- 如何删除 Windows.old 文件夹
- Scala多线程:使用Executors提交Callable任务代码示例
- 安卓实训项目源码_综合性项目:在线学习考试系统
- django 搜索
- 回文子串—leetcode647
- Java集合—PriorityQueue底层原理
- 牛客题霸 [有关阶乘的两个问题1] C++题解/答案
- 漫画:如何实现大整数相加
- AD7124-4调试经验分享
- 通过H5(浏览器/WebView/其他)唤起本地app
- Hadoop Yarn Linux Container Executor配置
- Android 各版本对应的SDK版本
- AWB——Complementarity-enhanced Mutual Networks for Unsupervised Domain Adaptation in Person Re-ID
- 详细指南!手把手教你上手Tableau软件!
- html加载完成 产生动作,页面加载功能设计总结
- 9-2分布迭代次数的15个梯度
- 一文读懂MEMS技术4大主要分类及应用领域
- error: can‘t create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
热门文章
- Educational Codeforces Round 20 B. Distances to Zero
- phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
- docker高级应用之智能添加与修改防火墙规则
- Spark API编程动手实战-08-基于IDEA使用Spark API开发Spark程序-01
- Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程
- AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
- 并发编程-Atomic的compareAndSet
- 高可用集群HA之双机集群
- mutable和volatile关键字
- UCF 大牛 Prof. Shah 课题组代码合集