Mybatis中详细解析几种参数传递方法有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1037个文字,预计阅读时间需要5分钟。
前言:前几天气温转好,面试了一个应届生,问了一个很简单的问题:你了解Mybatis中有几种传参方式吗?没有想过其他问题,回答的很好,唯独这个问题我了解一半,勉强回答了其中两种方式。以下是两种传参方式的简要说明:
1. 基于XML的传参: 在Mybatis的映射文件中,通过``标签定义参数类型,然后在SQL语句中使用`#{参数名}`的方式引用参数值。例如:
xml SELECT * FROM users WHERE id=#{id}
在此例中,`id`是方法参数,也是SQL语句中的参数。
2. 基于注解的传参: 在Mapper接口的方法上使用`@Param`注解指定参数名称,然后在SQL语句中使用该名称引用参数值。例如:
java @Mapper public interface UserMapper { @Select(SELECT * FROM users WHERE id=#{id}) User selectUserById(@Param(id) int id); }
在此例中,`id`是方法参数,也是SQL语句中的参数。
前言
- 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过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传参方式内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!
本文共计1037个文字,预计阅读时间需要5分钟。
前言:前几天气温转好,面试了一个应届生,问了一个很简单的问题:你了解Mybatis中有几种传参方式吗?没有想过其他问题,回答的很好,唯独这个问题我了解一半,勉强回答了其中两种方式。以下是两种传参方式的简要说明:
1. 基于XML的传参: 在Mybatis的映射文件中,通过``标签定义参数类型,然后在SQL语句中使用`#{参数名}`的方式引用参数值。例如:
xml SELECT * FROM users WHERE id=#{id}
在此例中,`id`是方法参数,也是SQL语句中的参数。
2. 基于注解的传参: 在Mapper接口的方法上使用`@Param`注解指定参数名称,然后在SQL语句中使用该名称引用参数值。例如:
java @Mapper public interface UserMapper { @Select(SELECT * FROM users WHERE id=#{id}) User selectUserById(@Param(id) int id); }
在此例中,`id`是方法参数,也是SQL语句中的参数。
前言
- 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过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传参方式内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

