MyBatis的映射
在Mapper.xml配置文件中的配置:
<select id="selectUserById" resultType="User" parameterType="java.lang.Integer">
select * from user where id = #{v}
</select>
以这个最简单的例子来看select 元素中属性有:
resultType, parameterType这两个属性,分别对应sql语句中的返回值类型和传入参数类型
MyBatis的输入映射
parameterType:此处要求传入的是Java中类型的全包名
parameterType可以有以下几种类型参数:
- 1.POJO类型
- 2.Java中内置的基本数据类型和八大包装类型
- 3.自定义包装类型
前两种都在前面的文章中提到,本文只提到自定义包装类型:所谓包装类型,就是将POJO类型包装在另外一个类中作为另外一个类的属性
自定义包装类:
package com.tangbaobao.mybits.pojo;
import java.io.Serializable;
import java.util.List;
/**
* @author 唐学俊
* @version 2018年1月15日上午11:04:19 实现序列化接口保证在RPC远程调用中对象的正确性
*/
public class QueryVo implements Serializable {
// 包装User
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
UserMapper.xml中的配置
<!-- 用包装类查询用户名查询用户 -->
<select id="findQueryVoUserName" resultType="com.tangbaobao.mybits.pojo.User"
parameterType="com.tangbaobao.mybits.pojo.QueryVo">
select * from user
where username like
"%"#{user.username}"%"
</select>
在这里需要注意的是传入的数据类型是Query,但是需要的username在user类下
所以可以理解的取值顺序为Query类->user属性–>User类->username属性
包装pojo的好处:某些业务需要组装的数据或者实体,包装pojo就非常简单
Mybatis输出映射
输出映射分为:
- 1.POJO类型映射
- 2.java内置数据类型映射
- 3.包装类型映射
前几篇文章的例子都是数据库的字段和PoJo相同,但是在某些情况下,数据库字段和Pojo类字段如果不一样就不能正的映射了,这时候,Mybatis为我们提供了数据库字段和Pojo字段的映射Map
<resultMap type="com.tangbaobao.mybits.pojo.User" id="user">
<id/ column = "数据库字段" property ="POJO类属性字段"><!--主键-->
<result column = "数据库字段" property ="POJO类属性字段"/><!--除了主键的其他字段映射-->
</resultMap>
<select id="findQueryVoUserName" resultMap="user"
parameterType="QueryVo">
select * from user
where username like
"%"#{user.username}"%"
</select>
在resultMap中需要注意的是引用的resut值是要映射Result的id,千万不要写重复或者写错,否则映射不到