输入映射
通过parameter指定输入参数的类型,类型可以是简单类型,vo实体类等。
需求:如果要完成用户信息的综合查询,需要传入的查询条件很复杂,建议使用自定义的包装对象。
package com.neusoft.vo;
public class UsersQuery {
//封装用户类
privateUsers users;
//setter和getter方法
publicUsers getUsers() {
returnusers;
}
publicvoid setUsers(Users users) {
this.users= users;
}
//还可以封装其他的类
//....................
}
Mapper.xml里面相关的SQL语句:
<select id="findUsersQuery"parameterType="usersquery" resultType="usersquery">
Select* from users where users.id=#{users.id} and users.username like ‘%${users.usersname}%’
</select>
输出映射:
resultType:使用resultType进行输出映射,只有查询出来的列名和vo实体类中的字段名完全一致,该列才可以映射成功。
如果查询出来的列名和vo实体类的字段名全部不一致,那么他就没有创建vo实体类。
只要查询出来的列名和vo字体类的字段名有一个一致,就会创建vo实体类。
当查询出来的结果集只有一行且一列的时候,可以使用简单的类型进行输出映射。
不管输出的是vo的实体类还是一个列表,在mapper.xml里面resultType指定的类型是一样的,只是在dao接口的方法的返回值不一样。生成的动态代理对象中是根据dao接口中的方法的返回值来确定是调用selectOne和selectList.
resultMap:mybatis中使用resultMap完成高级输出结果映射。
如果查询出来的列名和vo实体类的字段名不一致,通过定义一个resultMap对列名和字段名做一个映射关系。
1.定义resultMap
2.使用resultMap作为SQL的输出映射类型
定义resultMap(在mapper.xml里面):
<!--
定义resultMap 将select idid_,username username_ from users 和
users中的字段名做一个映射关系type:resultMap最终映射的Java对象,可以使用别名 id:对resultMap的唯一标识
-->
<resultMap type="users"id="usersResultMap">
<!--
id标识查询结果集中唯一标识column:查询出来的列名 property:type指定的vo实体类的属性名
最终resultMap对column和property作唯一映射关系(对应关系)
-->
<id column="id_"property="id" />
<!-- 对普通列名的定义-->
<resultcolumn="username_" property="username" />
</resultMap>