Mybatis的几种传参方式,你了解多少?
时间:2022-07-28
本文章向大家介绍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>
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释