MyBatis中在Mapper中如何传递多个参数?(4种方法,超级详细)

这篇具有很好参考价值的文章主要介绍了MyBatis中在Mapper中如何传递多个参数?(4种方法,超级详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、若Dao层函数有多个参数,那么其对应的xml中,#{0}代表接收的是Dao层中的第一个参数,#{1}代表Dao中的第二个参数,以此类推。

假设Dao层函数有两个参数,分别是int类型的id和String类型的name:

// Dao层函数
public User getUserByIdAndName(int id, String name);

<!--对应的Mapper-->
<select id="getUserByIdAndName" resultType="User">
  SELECT * FROM user WHERE id = #{0} AND name = #{1}
</select>

2、使用@Param注解,在Dao层函数的参数前面添加@Param注解来显式指定每个参数的名称,例如:

// Dao层函数
public User getUserByIdAndName(@Param("id") int id, @Param("name") String name);

<!-- 对应的Mapper-->
<select id="getUserByIdAndName" resultType="User">
  SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>

3、将多个参数封装成Map并传递到Mapper中,例如:

// Dao层函数
public User getUser(Map<String, Object> map);

<!-- 对应的Mapper-->
<select id="getUser" resultType="User">
  SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>

调用该函数时需要将参数封装成Map并设置key值为"id"和"name",例如:

Map<String, Object> map = new HashMap<>();
map.put("id", 1);
map.put("name", "张三");
User user = userDao.getUser(map);

4、如果Dao层函数传递的是一个对象,该对象包含多个参数,MyBatis会将该对象看做是一个参数,并且会自动地将对象中的属性值映射到Mapper中的SQL语句中。

以查询用户信息为例,假设我们有一个User类,包含id、name和age三个属性:

public class User {
    private int id;
    private String name;
    private int age;
    // 省略getter和setter方法
}

在Dao层函数中,我们可以直接传入一个User对象作为参数:

public User getUser(User user);

在Mapper.xml文件中,可以使用类似以下的SQL语句:

<select id="getUser" resultType="com.example.User">
  SELECT * FROM user WHERE id = #{id} AND name = #{name} AND age = #{age}
</select>

在执行Dao层函数时,MyBatis会自动地根据user对象中的属性值,将#{id}、#{name}和#{age}替换为对应的属性值。例如:

User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(20);
User result = userDao.getUser(user);

在执行上述代码时,MyBatis会将Mapper.xml中的SQL语句解析成如下形式:

SELECT * FROM user WHERE id = 1 AND name = '张三' AND age = 20

然后执行该SQL语句,并将结果映射成User对象返回。

具体实现原理是通过MyBatis的OGNL表达式(Object-Graph Navigation Language,即对象图导航语言)实现的。当我们在Mapper.xml文件中使用#{propertyName}时,MyBatis会使用OGNL表达式解析该表达式,找到对应的属性值,并将其替换到SQL语句中。

例如,在上述例子中,当我们使用#{id}#{name}#{age}时,MyBatis会使用OGNL表达式从Map中获取key分别为"id""name""age"的value,也就是user对象中的id、name和age属性值。文章来源地址https://www.toymoban.com/news/detail-445520.html

到了这里,关于MyBatis中在Mapper中如何传递多个参数?(4种方法,超级详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 多模块(A依赖B)集成mybatis , mybatis.mapper-locations 配置多个mapper路径配置

    最近在用SpringBoot 多模块 集成mybatis,模块A 依赖于模块B, 模块A 和模块B 各自有各自的业务逻辑和mapper 文件,模块A 的mapper xml 文件存放在resource 下的 mybatisMapper 文件夹,模块B 的mapper xm 文件存放在 B 模块的resource 下的 mapper 文件夹, 打包时以A 模块为主,B 以jar 包方式被A 依赖

    2024年02月03日
    浏览(54)
  • Mybatis1.10 Mybatis参数传递

    Mybatis 接口方法中可以接收各种各样的参数,如下: 多个参数 单个参数:单个参数又可以是如下类型 POJO 类型 Map 集合类型 Collection 集合类型 List 集合类型 Array 类型 其他类型 1.10.1 多个参数 如下面的代码,就是接收两个参数,而接收多个参数需要使用 @Param 注解,那么为什么

    2024年02月10日
    浏览(44)
  • xxl-job中在分片的时候项目模块如何开启多个执行器?

    在xxl-job中,要在分片时开启多个执行器,您需要按照以下步骤进行操作: 1.在xxl-job的项目中,找到对应的模块(即需要开启多个执行器的模块)。 2.在模块的配置文件(通常是application.properties或application.yml)中,找到以下属性: properties xxl.job.executor.appname=   xxl.job.executor

    2024年02月09日
    浏览(40)
  • 小程序View点击响应传递多个参数

    小程序开发中,view的点击事件是通过bindtap绑定的,比如: 在js文件中是这样获取参数id的: 如果要传递多个参数,就要用到data-xxx属性了,xxx的意思是这个名称可以随便取: 打印一下传递到js的数据,会看到一个json格式的数据: 所以我们要获取点击的参数,可以这样写:

    2024年04月14日
    浏览(39)
  • vue中使用$emit传递多个参数

    子组件: 父组件: 方法一:将要传的数据放到对象中,再将对象传给父组件 子组件: 父组件: 方法二:直接传递多个参数 子组件: 父组件: 接收的时候要传 arguments 参数 👇觉得有帮助的朋友可以支持下作者哦,您的鼓励是我创作的最大动力,如有开发问题可联系作者

    2024年02月13日
    浏览(50)
  • MyBatis核心 - SqlSession如何通过Mapper接口生成Mapper对象

    书接上文 MyBatis – 执行流程 我们通过SqlSession获取到了UserMapper对象,代码如下: 我们看到,往 sqlSession.getMapper 传入UserMapper接口后,得到的是一个 userMapper 对象,这是怎么做到的呢? 查看SqlSession源码发现,SqlSession有两个实现类,在正常情况下使用的当然就是默认的 Default

    2024年02月14日
    浏览(49)
  • 【Python】函数进阶 ① ( 函数返回多个返回值 | 函数参数传递类型简介 | 位置参数 | 关键字参数 )

    在函数中 , 如果要 返回 多个返回值 , 可以 在 return 语句中 , 设置多个返回值 , 这些返回值之间使用 逗号 隔开 , 这些返回值的类型是 元组 tuple 类型的 ; 在下面的代码中 , 返回了 3 个返回值 , 其 本质上是返回了一个包含 3 个元素的 元组 数据容器 , 可以使用多重赋值将返回的

    2024年02月11日
    浏览(56)
  • Vue 子组件触发父组件事件,传递多个参数以及异常情况处理

    今天这篇文章记录一下子组件调用父组件事件, 传参的逻辑 。 以及一些特殊的情况。 1.1 父组件 1.2 子组件 1.3 效果截图 上述的示例其实就是一个最基础的,子组件触发父组件事件的代码。 2.1 注意事项一: 子组件 $emit 的事件名和父组件接收的事件名必须相同。 事件名称不

    2024年02月03日
    浏览(74)
  • MyBatis - DAO 接口(Mapper.xml)支持方法重载吗?

    方法重载(Method Overloading)是指在同一个类中定义多个方法,它们具有相同的方法名但参数列表不同。 在 MyBatis 的 DAO 层接口中, 是允许方法重载的。 在 DAO 层接口中,可以根据不同的需求和条件定义多个方法,提供不同的查询或操作方式。 在 MyBatis 的 XML 映射文件中, 是

    2024年01月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包