输入参数配置
parameterType 配置参数
- 使用说明:
parameterType的取值可以是基本类型,引用类型(String),实体类类型,包装类 - 注意事项:
- 基本类型和String可以直接写类型名称,也可以使用包名.类名的方式,例如:java.lang.String
- 实体类类型,如果不起别名(在后面有介绍)就只能写全限定类名
- MyBatis支持的默认别名
传递 pojo 包装对象
- 开发中通过 pojo 传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。 (就是有多个参数作为查询条件,当这几个参数又不在同一个实体类里,解决方法就是将多个实体类封装到一个类中)
- 演示
// 接口方法
List<User> findByVo(QueryVo vo);
// 包装类
public class QueryVo implements Serializable {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
<!--xml配置文件-->
<select id="findByVo" parameterType="com.zsc.domain.QueryVo" resultType="com.zsc.domain.User">
select * from user where username like #{user.username};
</select>
// 测试
@Test
public void testFindByQueryVo() {
QueryVo vo = new QueryVo();
User user = new User();
user.setUserName("%王%");
vo.setUser(user);
List<User> users = userDao.findByVo(vo);
for (User u : users) {
System.out.println(u);
}
}
输出结果封装
resultType 配置结果类型
- 使用说明:
resultType 属性可以指定结果集的类型,它支持基本类型和实体类类型,和 parameterType 一样,如果不起别名(在后面有介绍)就只能写全限定类名
实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装 - 基本类型示例
// 接口方法
int findTotal();
<!--xml配置文件-->
<!--查询总行数-->
<select id="findTotal" resultType="int">
select count(*) from user;
</select>
- 实体类类型示例
// 接口方法
List<User> findAll();
<!--xml配置文件-->
<select id="findAll" resultType="com.zsc.domain.User">
select * from user
</select>
- 特殊情况示例
修改User实体类的属性名称
private Integer userId;
// 这个可以赋值,因为Windows下的mysql不区分大小写
private String userName;
private Date userBirthday;
private String userSex;
private String userAddress;
当实体类的属性名与数据库表名不一样的时候,这样就无法对查询的结果进行封装,第一种解决方法就是sql语句写成别名的形式,第二种方法下面介绍
resultMap 结果类型
- 作用:
resultMap 标签可以建立查询的列名和实体类的属性名称不一致时建立对应关系。从而实现封装 - 说明:
在 select 标签中使用 resultMap 属性指定引用即可。同时 resultMap 可以实现将查询结果映射为复杂类 型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询 - 定义 resultMap
<!--
type属性:指定实体类的全限定类名
id 属性:给定一个唯一标识,是给查询 select 标签引用用的
-->
<resultMap type="com.com.domain.User" id="userMap">
<!--
id 标签:用于指定主键字段
result 标签:用于指定非主键字段
column 属性:用于指定数据库列名
property 属性:用于指定实体类属性名称
-->
<id column="id" property="userId"/>
<result column="username" property="userName"/>
<result column="sex" property="userSex"/>
<result column="address" property="userAddress"/>
<result column="birthday" property="userBirthday"/>
</resultMap>
<!--将resultType改为resultMap,并把< resultMap >标签的 id 填入
<select id="findAll" resultMap="userMap">
select * from user
</select>