一、输入类型( parameterType )
简单类型( 基本数据类型 )
HashMap
单个JavaBean( 自定义JavaBean类型 )
传入JavaBean的包装类型( 用处:比如说用户的复杂查询( 关联查询 ),需要传入用户信息,商品信息,订单信息等 )
介绍 JavaBean的包装类型( 定义VO和 Mapper.xml )
二、输出类型( resultType和resultMap )
resultType
1、resultType:输出JavaBean类型:
使用resultType进行映射,只有查询出来的列名和JavaBean中的属性名一致,才可以映射成功( 和dbUtils很类似 )。
SELECT username username_,sex sex_ from Users
如果查询出来的列名和JavaBean中的属性名完全不一致,就不会创建JavaBean对象( null )
如果查询出来的列名和JavaBean中的属性名有一个一致,就会创建JavaBean对象
2.resultType:输出简单类型:
查询出来的结果只有一行一列,才能使用简单类型
3.resultType:输出JavaBean 集合类型:
在mapper.xml中,查询出单个JavaBean列表,resultType指定的类型还是JavaBean类型。在Java中获取返回值类型是集合类型。
resultMap( 来完成高级结果映射 ):查询出的列名和JavaBean的属性名不一致,可以通过定义一个resultMap和JavaBean之间做一个关系映射
定义resultMap
使用resultMap作为mapper.xml的输出映射类型
测试
<!-- 定义resultMap
select id id_,name name_ from Users where id=#{id} 和 Users类中的属性做映射
type:resultMap最终所映射的JavaBean类型( 可以使用别名 )
id:对resultMap的唯一标识
-->
<resultMap id="userResultMap" type="com.ts.domain.Users">
<!-- id标识查询结果中的唯一标识
column:数据库表的列名
property:JavaBean属性名
最后将column和property做映射
-->
<id column="id_" property="id"/>
<!-- result:对普通列的映射定义 -->
<result column="name_" property="name"/>
</resultMap>
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
select id id_,name name_ from Users where id=#{id}
</select>
@Test
public void testResultMap() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Users user = userMapper.findUserByIdResultMap(2);
System.out.println(user);
}