Mybatis中有哪些传参方式?

提问者:帅平 问题分类:面试刷题
Mybatis中有哪些传参方式?
4 个回答
吹南风
吹南风
数组传参
这种方式类似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>
发布于:1年前 (2023-05-08) IP属地:四川省
自然萌鹿鹿
自然萌鹿鹿
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>
发布于:1年前 (2023-05-08) IP属地:四川省
离不开天空的云
离不开天空的云
多个参数
多个参数的情况下有很多种传参的方式。分别有:
使用索引【不推荐】
使用@Param
使用Map
POJO【推荐】
发布于:1年前 (2023-05-08) IP属地:未知
披起头发是娇弱
披起头发是娇弱
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>
发布于:1年前 (2023-05-08) IP属地:四川省
心尖爱人
心尖爱人
使用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>
发布于:1年前 (2023-05-08) IP属地:四川省
ε小可爱з
ε小可爱з
使用@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>
发布于:1年前 (2023-05-08) IP属地:四川省
沐叶清风
沐叶清风
使用索引【不推荐】
多个参数可以使用类似于索引的方式传值,比如#{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>
发布于:1年前 (2023-05-08) IP属地:四川省
唯宠她
唯宠她
单个传参
单个参数的传参比较简单,可以是任意形式的,比如#{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>
发布于:1年前 (2023-05-08) IP属地:四川省
我来回答