MyBatis在Mapper中传递多个参数的四种方法详解

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

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

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

1

2

3

4

5

6

// 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注解来显式指定每个参数的名称,例如:

1

2

3

4

5

6

// 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中,例如:

1

2

3

4

5

6

// 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",例如:

1

2

3

4

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三个属性:

1

2

3

4

5

6

public class User {

    private int id;

    private String name;

    private int age;

    // 省略getter和setter方法

}

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

1

public User getUser(User user);

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

1

2

3

<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}替换为对应的属性值。例如:

1

2

3

4

5

User user = new User();

user.setId(1);

user.setName("张三");

user.setAge(20);

User result = userDao.getUser(user);

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

1

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-832413.html

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

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

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

相关文章

  • Hive的四种排序方法

    hive排序方法,hive的排序方式 hive有四种排序方法: ORDER BY 、SORT BY 、DISTRIBUTE BY 、CLUSTER BY 0. 测试数据准备 uuid dept salary 1001 研发部 16000 1002 市场部 17000 1003 销售部 11000 1004 研发部 15000 1005 销售部 12000 1006 研发部 21000 1007 产品部 16000 1008 研发部 18000 1009 市场部 17000 1010 产品部 16

    2024年02月02日
    浏览(10)
  • 详解JS的四种异步解决方案!

    详解JS的四种异步解决方案!

    目录 同步异步的概念 js中异步的应用场景 实现异步的四种方法 1、 回调函数 2、Promise 3、Generator 4、 async/await         「异步编程」 是前端工程师日常开发中经常会用到的技术,也是校招面试过程中常考的一个知识点。         通过掌握 「异步编程」 的四种方式,可

    2024年01月18日
    浏览(12)
  • 最大公约数的四种方法

    最大公约数的四种方法

    求两数的最大公约数,一共有四种方法:暴力穷举法、更相减损法、辗转相除法、stein 算法,小女不才,花了几天的时间终于把这几种方法全部弄明白,现在就把它们全部分享出来。 首先,假设被求的两个数为 x、y,且 x y。最大公约数 d = gcd (x , y) 正如名字所说,暴击穷举法

    2024年02月05日
    浏览(10)
  • 检测数据类型的四种方法

    检测数据类型的四种方法

    一、数据类型: 1、基本数据类型:String、Number、Boolean、Null、Undefined、Symbol 、BigInt 2、引用数据类型:Object、Array、Function、Date、RegExp 二、检测数据类型的四种方法 1.typeof检测   特点:typeof只能检测基本数据类型(除了null),不能准确的检测引用数据类型。 object、array、

    2024年02月15日
    浏览(8)
  • 数据的四种基本存储方法

    数据的存储结构可用以下四种基本存储方法得到: ( 1 )顺序存储方法     该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。     由此得到的存储表示称为顺序存储结构  (Sequential Storage Structure),通常借

    2024年02月15日
    浏览(8)
  • MySQL批量更新的四种方法

    MySQL批量更新的四种方法

    最近做一个需求,更新3w条数据,一个一个update去更新的,结果花了80分钟,这样性能上很差,也容易阻塞,所以就找了一些MySQL批量更新的方式,在此记录一下 这种更新会将其它字段更新为默认值,因为它是先将重复记录删掉再更新,谨慎使用 1 2 replace into ` user ` (id,age) va

    2024年02月16日
    浏览(10)
  • Hive数据导出的四种方法

    hive数据仓库有多种数据导出方法,我在本篇文章中介绍下面的四种方法供大家参考: Insert语句导出、Hadoop命令导出、Hive shell命令导出、Export语句导出。 Hive支持将select查询的结果导出成文件存放在文件系统中。语法格式如下; 注意: 导出操作是一个OVERWRITE覆盖操作,慎重

    2024年01月17日
    浏览(8)
  • 防止暴力破解ssh的四种方法

    防止暴力破解ssh的四种方法

    防止暴力破解的四种方法: 1 密码要写的足够的复杂,通常建议将密码写16位,并且无连贯的数字或者字母;当然也可以固定一个时间修改一次密码,推荐是一个月修改一次会稳妥一些 2 修改ssh的端口号,给对方一些迷惑性,因为远程linux服务器默认端口是22,修改成其他的端

    2024年02月03日
    浏览(11)
  • 【Python--定时任务的四种方法】

    【Python--定时任务的四种方法】

    当每隔一段时间就要执行一段程序,或者往复循环执行某一个任务,这就需要使用定时任务来执行程序。应用很广泛,可以实现程序的自动化,而不需要我们手动的在规定时间内执行。如爬虫,如定时器等等。以下将介绍几种pyhton常用的定时任务方法。 执行简单,代码容易理

    2024年02月04日
    浏览(10)
  • 实现瀑布流布局的四种方法

    实现瀑布流布局的四种方法

    页面上是一种 参差不齐 的多栏布局,类似上图所示随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部,大部分为图片,图片 固定 宽度,高度 不一 ,根据原比例缩放到宽度达到固定的要求,每行排满后,新的图片添加到后面 固定宽度,高度不一 岑

    2023年04月15日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包