输入映射:通过parameterType来指定输入参数的类型,类型可以是简单类型、hashmap、pojo类型
1、简单类型、pojo类型在配置文件中有
2、hashmap
<select id="finfUserByHashMap" parameterType="hashmap" resultType="user">
select * from user where id=#{id} and username like '%${username}%'
</select>
注意:两个参数 id 和 username 为 hashmap 中的 key,hashmap为默认支持的别名。
3、传递 pojo 的包装对象
需求:进行综合查询,需要传入的查询条件很复杂(包括用户信息、商品信息、订单信息、其他信息等等)
针对上面的需求,建议使用自定义的包装类型的 pojo
在包装类型的 pojo 中将复杂的查询条件包装进去。
具体做法:创建一个包装类(一般命名为 xxxQueryVo),在其中声明需要包装进来的所有类,并生成其getter和setter方法。之后即可在xxxMapper.xml中用:属性.属性.属性 的方式来获取查询条件值
4、xxxMapper.xml
在 UserMapper.xml 中定义用户信息综合查询(查询条件复杂)
用:属性.属性.属性 的方式来获取查询条件值
输出映射
1、resultType ,注意:
A、使用 resultType 进行输出映射时,只有查询出来的列名和 pojo 中的属性名一致,该列才可能映射成功。
B、当查询出来的结果集只有一列且只有一行,可以使用简单类型进行输出映射。如分页时的 count 总数。
C、不管是输出的 pojo 单个对象还是一个列表(list中包括列表),在 xxxMapper.xml 中 resultType 指定的类型是一样的,都是 pojo 对象的全路径。
D、在 xxxMapper.java 中指定的方法的返回值可能会不一样:若输出的是单个pojo对象,那么 xxxMapper.java 中的返回值也是单个 pojo 对象;若输出的是 pojo对象的list集合,那么 xxxMapper.java 中的返回值是 pojo对象的list集合
E、生成的动态代理对象中是根据 xxxMapper.java 中方法的返回值类型确定是调用 selectOne(返回单个对象),还是 selectList(返回集合对象)
2、resultMap:MyBatis 中使用 resultMap 来完成高级输出结果映射
A、定义resultMap
<!-- 定义 resultMap
type:resultMap 最终映射的 java 对象类型,可以使用别名
id:对 resultMap 的唯一标识 -->
<resultMap type="user" id="userResultMap">
<!-- id 表示查询结果集中的唯一标识
column:查询出来的列名
property:type指定的pojo类型中的属性名
最终 resultMap 对 column 和 property 做一个映射关系(对应关系) -->
<id column="id_" property="id"/>
<!-- result 表示查询结果集中的一般标识
column:查询出来的列名
property:type指定的pojo类型中的属性名
最终 resultMap 对 column 和 property 做一个映射关系(对应关系) -->
<result column="username_" property="username"/>
</resultMap>
B、使用resultMap
<!-- 使用resultMap进行输出映射
resultMap:指定定义的resultMap的id,如果这个resultMap在其他的xxxMapper.xml文 件中,前面需要加上namespace -->
<select id="getListByResultMap" resultMap="userResultMap">
select id id_,username username_ from user
</select>
小结:
如果 resultType 进行输出映射时,只有查询出来的列名和 pojo 中的属性名一致,该列才可以映射成功;如果此时查询出来的列名和 pojo 中的属性名不一致,则可以通过定义一个 resultMap 来对列名和 pojo 属性名之间作一个映射关系。