(五)Mybatis当中xml映射文件参数传递的方式

本文详细介绍了MyBatis中各种参数传递方式,包括单个参数、多个参数、POJO对象、Map、list集合等场景,并提供了具体的接口示例与XML映射文件配置。

这篇文章主要讲述Mybatis当中xml映射文件参数传递的方式,本篇文章主要来源于官方文档整理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
首先需要知道的是不管他传入的是单个参数还是多个参数,Mybatis内部当中都是以Map形式给我们传递到映射文件当中的。

1、单个参数

mybatis不会做特殊处理,#{参数名/任意名}:取出参数值。
接口单个参数名称为lastName1,而xml当中使用 #{任意名称} 照样可以接到值

public Employee getEmpByLastNameLikeReturnMap(String lastName1);

xml映射文件

<select id="getEmpByLastNameLikeReturnMap" resultType="com.gzl.mybatis.bean.Employee">
	select * from tbl_employee where last_name like #{lastName}
</select>

2、多个参数

不固定key值的情况

mybatis会做特殊处理,多个参数会被封装成 一个map。
key:param1…paramN,或者参数的索引也可以
value:传入的参数值
接口当中的抽象方法

public Employee getEmpByIdAndLastName(Integer id,String lastName);

由于传参的时候并没有固定名称,Mybatis会自动生成key名称,xml映射文件当中如果想要引用接口传递的参数只能通过mybatis生成好的key值来获取传递的值。

<select id="getEmpByIdAndLastName" resultType="com.gzl.mybatis.bean.Employee">
	select * from student where id = #{param1} and last_name=#{param2}
</select>

固定key值的情况

通过@Param注解来指定key值
接口当中的抽象方法

public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("lastName")String lastName);

xml映射文件

<select id="getEmpByIdAndLastName" resultType="com.gzl.mybatis.bean.Employee">
	select * from student where id = #{id} and last_name=#{lastName}
</select>

固定了key值名称,我们也照样可以通过#{parm1}、#{parm2}的形式调用

3、POJO

如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
接口当中的抽象方法

public Employee getEmpByPojo(Employee employee);

xml映射文件当中取值直接#{POJO对象里面的属性名称}即可

<select id="getEmpByPojo" resultType="com.gzl.mybatis.bean.Employee">
	select * from student where id = #{id} and last_name=#{lastName}
</select>

4、Map

如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map
#{key}:取出map中对应的值
接口当中的抽象方法

public Employee getEmpByMap(Map<String, Object> map);
<select id="getEmpByPojo" resultType="com.gzl.mybatis.bean.Employee">
	select * from student where id = #{id} and last_name=#{lastName}
</select>

5、list集合

如果是Collection(List、Set)类型或者是数组,也会特殊处理。也是把传入的list或者数组封装在map中。
key:Collection(collection),如果是List还可以使用这个key(list),数组(array)
接口当中的抽象方法

public Employee getEmpById(List<Integer> ids);

取值:取出第一个id的值: #{list[0]}

6、特殊情况

接口当中传了一个参数和一个pojo的时候

public Employee getEmp(Integer id,@Param("e")Employee emp);

取值:id==>#{param1} lastName===>#{param2.lastName/e.lastName}

注意

以上映射文件当中都没有使用parameterType来指定传入值的类型,这个是可以省略的,不管任何类型都可以省略。
参数多时会封装map,为了不混乱,我们可以使用@Param来指定封装时使用的key
#{key}就可以取出map中的值

### MyBatisXML 映射文件 `sql` 标签的使用MyBatisXML 映射文件中,`<sql>` 标签用于定义可重用的 SQL 片段。通过这种方式,可以在不同的查询语句之间共享公共的部分,从而减少重复代码并提高维护效率。 #### `<sql>` 标签的基本语法 ```xml <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql> ``` 上述例子展示了如何创建一个名为 `userColumns` 的 SQL 片段,其中 `${alias}` 是动态替换的内容[^1]。 #### 在其他标签内引用 `<sql>` 为了在实际的 SQL 查询中使用已定义好的片段,可以借助于 `<include>` 标签: ```xml <select id="selectUsers" resultType="User"> SELECT <include refid="userColumns"><property name="alias" value="u"/></include>, d.department_name FROM users u LEFT OUTER JOIN departments d ON u.department_id=d.id </select> ``` 这里展示的是在一个 `SELECT` 语句里引入之前定义过的字段列表,并传递了别名参数给该片段[^2]。 #### 动态 SQL 和 `<sql>` 结合的例子 当需要构建更复杂的逻辑时,也可以把条件判断加入到 `<sql>` 块里面去: ```xml <sql id="dynamicWhereClause"> WHERE 1=1 <if test="name != null and name != '' "> AND name = #{name} </if> <if test="age != null"> AND age >= #{age} </if> </sql> <select id="findUsersByConditions" parameterType="map" resultType="User"> SELECT * FROM users <include refid="dynamicWhereClause"/> </select> ``` 这段代码说明了怎样组合固定的和基于某些条件下才生效的过滤条件[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值