输入映射和输出映射
·输入映射
通过parameterType指定输入参数类型,类型可以是简单类型、hashMap、pojo的包装类。
1、传递pojo包装对象
(1)需求
完成用户信息的综合查询,需求传入查询条件(可能包括用户信息,其他信息,比如商品、订单)。
(2)定义包装类型pojo
针对上边需求,建议使用自定义包装类型的pojo,在包装pojo中将复杂的查询条件包装进去
(3)mapper.xml
在UserMapper.xml中定义用户信息综合查询(查询条件复杂,高级查询进行复杂关联查询)
(4)mapper.java
(5)测试代码
·输出映射
1、resultType
-使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功
-如果查询出来的列名和pojo中的属性名全部不一致,就不会创建pojo对象
-只要查询出来的列名和pojo中属性有一个一致,就会创建pojo对象
(1)输出简单类型
·需求:用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页
第一步:mapper.xml
第二步:mapper.java
小结:查询结果的结果集只有一行且一列的时候,方可使用简单类型进行输出映射。
(2)输出pojo对象和pojo列表
不论是输出pojo对象还是一个pojo列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。不一样的是在mapper.java指定的方法中的返回值不一样:
-输出单个pojo对象,方法的返回值是pojo对象
-输出pojo对象list,方法的返回值是List<pojo>
2、resultMap
mybatis中使用resultMap完成高级输出结果映射
(1)如果查询出来的列名和pojo的属性值不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射关系
-定义一个resultMap
-使用resultMap作为statement的输出映射类型
(2)将下边的sql使用UserCustom完成映射
select c_id id,c_name name from custom where c_id = #{value}
userCustom的属性名和上边查询的列名不一致
第一步:mapper.xml
-定义一个resultMap
<!-- 定义resultMap
将select c_id id,c_name name from custom where c_id = #{value}查询出来的列名与UserCustom的属性作映射关系
type:resultMap最终映射的java对象类型,可以使用别名
id:对resultMap的唯一标识
-->
<resultMap type="userCostom" id="userResultMap">
<!-- id标签表示查询结果集中唯一的表示
column:查询出来的列名
property:type指定pojo类的属性名
最终resultMap对column和property作一个关系映射
-->
<id column="id" property="C_Id"/>
<!-- result标签表示查询结果集中普通列
column:查询出来的列名
property:type指定pojo类的属性名
-->
<result column="name" property="C_Name"/>
</resultMap>
-使用resultMap作为statement的输出映射类型
<!-- 使用resultMap进行输出映射 -->
<!-- resultMap:指定定义resultMap的id,如果这个resultMap在其他的mapper.xml文件中,需要在resultMap:属性值中加上resultMap所在文件的namespace -->
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
select c_id id,c_name name from custom where c_id = #{value}
</select>


·使用resultType进行输出映射,只有查询列名和pojo对象属性一致才可完成映射
·当查询列名和pojo对象属性不一致时,可以使用resultMap自定义映射关系完成列名和pojo属性之间的映射