文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis实现传入多个参数的四种方法详细讲解

2023-01-28 06:06

关注

一、Mybatis四种传递多个参数的方式

XML文件或者注解中都通过#{}获取参数的值,${}也可以,但是存在SQL注入问题。

1)参数索引

Mybatis会将参数放在map集合中,并以如下方式存储数据:

以param1, param2…为key,参数值为value。

多个参数可以使用类似于索引的方式传值,比如#{param1}对应第一个参数,#{param2}对应第二个参数…

1> Mapper方法:

User getUserByUserIdAndName(Long userId, String name);

2> XML文件内容:

<select id="getUserByUserIdAndName" resultType="com.saint.vo.User">
    select
    id, name, age
    from
    tb_user
    where
    id = #{param1} and name = #{param2}
</select>

根据开发规范,这种方式很不推荐!!

如果参数个数比较少,并且不想使用Map、POJO的方式,可以使用参数名 替代 索引。

<select id="getUserByUserIdAndName" resultType="com.saint.vo.User">
    select
    id, name, age
    from
    tb_user
    where
    id = #{userId} and name = #{name}
</select>

控制台日志输出:

2)@Param

Mybatis会将参数放在map集合中,除了以param1, param2..为key的方式存储数据外,还会以如下方式存储数据:

@Param注解的value属性值为key,参数值为value。

1> Mapper方法:

User getUserById(@Param("id") Long id);

2> XML文件内容:

<select id="getUserById" parameterType="long" resultType="com.saint.vo.User">
    select
        id, name, age
    from
        tb_user
    where
        id = #{id}
</select>

控制台日志输出:

3)Map集合

Mybatis底层就是将入参转换成Map,入参直接传Map时,#{key}中的key就是Map中的key;

1> Mapper方法:

Message getMessageByMap(Map<String, Object> params);

2> XML文件内容:

<select id="getMessageByMap" parameterType="map" resultType="com.saint.vo.Message">
    select
        id, msg_id, status, content, deleted, create_time, update_time
    from
        tb_message
    where
        id = #{id} and msg_id = #{msgId}
</select>

3> Mapper方法的调用:

Map<String, Object> params = new HashMap<>();
params.put("userId", 2L);
params.put("userName", "saint");
User user = userMapper.getUserByMap(params);

控制台日志输出:

4)POJO实体类

多个参数也可以用实体类封装起来,此时对应的key就是属性名称,注意POJO实体类中的字段一定要有get方法。

1> Mapper方法:

List<User> getUserByUser(User user);

2> XML文件内容:

<select id="getUserByUser" parameterType="com.saint.vo.User" resultType="com.saint.vo.User">
    select id, name, age
    from tb_user
    where 1=1
    <if test="id != null">
        and id = #{id}
    </if>
    <if test="name != null and name != ''">
        and name = #{name}
    </if>
    <if test="age != null">
        and age = #{age}
    </if>
</select>

3> Mapper方法的调用:

User userParam = new User();
userParam.setName("saint");
userParam.setId(2L);
List<User> user = userMapper.getUserByUser(userParam);
System.out.println("user = " + user);

控制台日志输出:

下一篇文章将针对这四种传参方式,从源码层面看一看MyBatis是如何处理的。

到此这篇关于Mybatis实现传入多个参数的四种方法详细讲解的文章就介绍到这了,更多相关Mybatis传入多个参数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯