Bootstrap

005 mybatis基础应用之输入映射与输出映射

parameterType(输入类型)

parameterType属性可以映射的输入参数Java类型有:简单类型、POJO类型、Map类型、List类型(数组)。
Map类型和POJO类型的用法类似

传递pojo包装对象

包装对象:pojo类中嵌套pojo。

通过包装POJO传递参数,完成用户查询

QueryVO

定义包装对象QueryVO

public class QueryVO {
	private User user;
}
SQL语句
SELECT * FROM user where username like '%小明%'
Mapper文件
<!-- 使用包装类型查询用户
使用ognl从对象中取属性值,如果是包装对象可以使用.操作符来取内容部的属性
-->
<select id="findUserList" parameterType="queryVo" resultType="user">
	SELECT * FROM user where username like '%${user.username}%'
</select>
Mapper接口
/**
* 用户管理mapper
*/
public interface UserMapper {
	//综合查询用户列表
	public List<User> findUserList(QueryVo queryVo)throws Exception;
}
测试方法
@Test
public void testFindUserList() throws Exception {
	SqlSession sqlSession = sqlSessionFactory.openSession();
	//获得mapper的代理对象
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	//创建QueryVo对象
	QueryVo queryVo = new QueryVo();
	//创建user对象
	User user = new User();
	user.setUsername("小明");
	queryVo.setUser(user);
	//根据queryvo查询用户
	List<User> list = userMapper.findUserList(queryVo);
	System.out.println(list);
	sqlSession.close();
}



resultType(输出类型)

resultType属性可以映射的java类型有:简单类型、POJO类型、Map类型。
不过Map类型和POJO类型的使用情况类似
使用要求
使用resultType进行输出映射时,要求sql语句中查询的列名和要映射的pojo的属性名一致。

映射简单类型

案例需求
查询用户记录总数。

Mapper映射文件
<!-- 获取用户列表总数 -->
<select id="findUserCount" resultType="int">
	select count(1) from user
</select>
Mapper接口
//查询用户总数
public int findUserCount() throws Exception;
测试代码
@Test
public void testFindUserCount() throws Exception {
	SqlSession sqlSession = sessionFactory.openSession();
 	//获得mapper的代理对象
 	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    int count = userMapper.findUserCount();
    System.out.println(count);
	sqlSession.close();
}

注意:输出简单类型必须查询出来的结果集只有一列。

resultMap

使用要求
如果sql查询列名和pojo的属性名可以不一致,通过resultMap将列名和属性名作一个对应关系,最终将查询结果映射到指定的pojo对象中。

注意:resultType底层也是通过resultMap完成映射的。
需求
将以下sql的查询结果进行映射:

SELECT id id_,username username_,birthday birthday_ FROM user

Mapper接口

public List<User> findUserListResultMap() throws Exception;

Mapper映射文件

由于sql查询列名和User类属性名不一致,所以不能使用resultType进行结构映射。
需要定义一个resultMap将sql查询列名和User类的属性名对应起来,完成结果映射。

<!-- 定义resultMap:将查询的列名和映射的pojo的属性名做一个对应关系 -->
<!--
type:指定查询结果要映射的pojo的类型
id:指定resultMap的唯一标示
-->
<resultMap type="user" id="userListResultMap">
	<!--
	id标签:映射查询结果的唯一列(主键列)
	column:查询sql的列名
	property:映射结果的属性名
	-->
	<id column="id_" property="id"/>
	<!-- result标签:映射查询结果的普通列 -->
	<result column="username_" property="username"/>
	<result column="birthday_" property="birthday"/>
</resultMap>
<!-- resultMap入门 -->
<select id="findUserListResultMap" resultMap="userListResultMap">
	SELECT id id_,username username_,birthday birthday_ FROM user
</select>

<id/>:表示查询结果集的唯一标识,非常重要。如果是多个字段为复合唯一约束则定义多个
Property:表示User类的属性。
Column:表示sql查询出来的字段名。
Column和property放在一块儿表示将sql查询出来的字段映射到指定的pojo类属性上。
<result/>:普通结果,即pojo的属性。

;