返回顶部
首页 > 资讯 > 后端开发 > JAVA >MyBatis中在Mapper中如何传递多个参数?(4种方法,超级详细)
  • 557
分享到

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

mybatisjavaspring 2023-09-09 09:09:33 557人浏览 独家记忆
摘要

若Dao层函数有多个参数,那么其对应的xml中,#{0}代表接收的是Dao层中的第一个参数,#{1}代表Dao中的第二个参数,以此类推。 假设Dao层函数有两个参数,分别是int类型的id和Strin

若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>

使用@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>

将多个参数封装成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);

如果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://blog.csdn.net/suanfajiegou/article/details/129728348

--结束END--

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

本文链接: https://lsjlt.com/news/401212.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作