经过前面几讲对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