MyBatis快速入门第五讲——Mapper.xml文件中的输入和输出映射以及动态SQL

本文深入探讨MyBatis的Mapper.xml文件,重点讲解输入映射(parameterType)和输出映射(resultType、resultMap),包括简单类型、POJO对象、包装对象、HashMap的传递,以及动态SQL的使用,如if、where、foreach和SQL片段,旨在帮助开发者更好地理解和运用MyBatis框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过前面几讲对MyBatis框架的学习,我们对Mapper.xml映射文件或多或少有了一些了解。本文将会对Mapper.xml映射文件作更加细致的梳理,我首先会从Mapper.xml映射文件中的输入和输出映射开始。温馨提示:本文案例代码的编写是建立在前文《MyBatis快速入门第四讲——SqlMapConfig.xml配置文件详解》案例基础之上的!

输入映射和输出映射

Mapper.xml映射文件中定义了操作数据库的SQL,每个SQL就是一个Statement,映射文件是MyBatis框架的核心。

parameterType(输入类型)

传递简单类型

传递简单类型,我之前就已经讲过了,这里只给出案例,如下图所示。
在这里插入图片描述

传递pojo对象

MyBatis会使用OGNL表达式解析对象字段的值,#{}或者${}花括号中的值就是pojo属性名称。传递pojo对象,之前我也讲过了,这里同样只给出案例,如下图所示。
在这里插入图片描述

传递pojo包装对象

在实际开发中,通常都可以通过pojo来传递查询条件,这样的查询条件一般是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时便可以使用包装对象来传递输入参数了,即pojo类中包含pojo类。
例如有这样一个需求:根据用户名称模糊查询用户信息列表,查询条件要放到QueryVo类的user属性中。有需求,就要解决它。首先,我们要在com.meimeixia.mybatis.pojo包下新建一个QueryVo类,该类的内容如下:

package com.meimeixia.mybatis.pojo;

/**
 * 包装的POJO
 * @author liayun
 *
 */
public class QueryVo {
   
   

	private User user;
	
	public User getUser() {
   
   
		return user;
	}

	public void setUser(User user) {
   
   
		this.user = user;
	}
	
}

然后,我们就要在UserMapper.xml映射文件中编写SQL语句了,即在UserMapper.xml映射文件中添加如下配置信息。
在这里插入图片描述
使用包装类型查询用户时,可使用OGNL表达式从对象中获取属性值,并且如果是包装对象还可以使用.操作符来进行获取。
接着,我们就要在UserMapper接口中添加如下方法了。
在这里插入图片描述
最后,在UserMapperTest单元测试类编写一个如下的测试方法。
在这里插入图片描述
试着运行以上单元测试方法,你便可以看到Eclipse控制台打印出了如下内容。
在这里插入图片描述

传递HashMap

传递HashMap在实际开发中用的很少,但我还是要讲一下。以传递HashMap综合查询用户信息为例来说,首先我们要在UserMapper.xml映射文件中添加如下配置信息。
在这里插入图片描述
然后,在UserMapper接口中添加如下方法。
在这里插入图片描述
最后,在UserMapperTest单元测试类编写一个如下的测试方法。
在这里插入图片描述
试着运行以上单元测试方法,你便可以看到Eclipse控制台打印出了如下内容。
在这里插入图片描述

resultType(输出类型)

输出简单类型

有这样一个需求:要查询用户表中的总记录数。有需求,我们就要解决它。首先,在UserMapper.xml映射文件中添加如下配置信息。
在这里插入图片描述
然后,在UserMapper接口中添加一个如下方法声明。
在这里插入图片描述
接着,在UserMapperTest单元测试类编写一个如下的测试方法。
在这里插入图片描述
注意,在输出简单类型时,查询出来的结果集必须是只有一条记录,紧接着会将第一个字段的值转换为输出类型。试着运行以上单元测试方法,你便可以看到Eclipse控制台打印出了如下内容。
在这里插入图片描述

输出pojo对象

输出pojo对象,我之前就已经讲过了,这里只给出案例,如下图所示。
在这里插入图片描述

输出pojo列表

输出pojo列表,我之前同样已讲过,这里只给出案例,如下图所示。
在这里插入图片描述
这儿再给出一个案例,即查询订单的所有信息。咱们的mybatis数据库中已经有了一个订单表(orders表),如下图所示。
这里写图片描述
如何编写代码查询所有的订单呢?大家可能想都不会想,就会像下面这样做。首先在com.meimeixia.mybatis.pojo包下新建一个Order类。

package com.meimeixia.mybatis.pojo;

import java.util.Date;

public class Order {
   
   
	private Integer id;

	private Integer userId;

	private String number;

	private Date createtime;

	private String note;

	public Integer getId() {
   
   
		return id;
	}

	public void setId(Integer id) {
   
   
		this.id = id;
	}

	public Integer getUserId() {
   
   
		return userId;
	}

	public void setUserId(Integer userId) {
   
   
		this.userId = userId;
	}

	public String getNumber() {
   
   
		return number;
	}

	public void setNumber(String number) {
   
   
		this.number = number == null ? null : number.trim();
	}

	public Date getCreatetime() {
   
   
		return createtime;
	}

	public void setCreatetime(Date createtime) {
   
   
		this.createtime = createtime;
	}

	public String getNote
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李阿昀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值