输出映射 输入映射 resultMap

6.输入映射
通过parameterType指定输入参数的类型,类型可以是简单类型,hashmap,pojo的包装类型
1.传递pojo的包装对象。
	1.需求
	完成用户信息综合查询,需要传入查询条件很复杂(可能包括用户信息,其他信息,比如商品,订单)
	2.定义包装类型pojo
	针对上述需求,建议使用自定义pojo类型
	在包装类型的pojo中将复杂的查询条件包装进去

eg

1.新建UserQueryVo	
	public class UserQueryVo {
	
		//传入多个id
		private List<Integer> ids;
	
		//包装查询条件 
		private UserCustom userCustom;
	

		public UserCustom getUserCustom() {
			return userCustom;
		}

		public void setUserCustom(UserCustom userCustom) {
			this.userCustom = userCustom;
		}

		public List<Integer> getIds() {
			return ids;
		}

		public void setIds(List<Integer> ids) {
			this.ids = ids;
		}
	
	}
2.在映射文件中添加
<!-- 根据性别用户名 综合查询 
	 #{userCustom.sex}取出pojo对象的性别
	'%${userCustom.username}%' 取出pojo包装对象的行名-->
	<select id="findUserList" parameterType="cn.mybatis.po.UserQueryVo" resultType="cn.mybatis.po.UserCustom">
		select * from user where user.sex = #{userCustom.sex} and user.username like '%${userCustom.username}%'
	</select>

3.接口定义
public List<UserCustom> findUserList(UserQueryVo userQuerVo) throws Exception; 

4.测试类
	@Test
	public void testFindUserList() throws Exception{
		//获取Session
		SqlSession session = sqlSessionFactory.openSession();
		//获取Mapper代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);
	
		UserQueryVo queryVo = new UserQueryVo();
		UserCustom userCustom = new UserCustom();
		userCustom.setSex("1");
		userCustom.setUsername("zhang");
		queryVo.setUserCustom(userCustom);
		
		List<UserCustom> list = userMapper.findUserList(queryVo);
		
		System.out.println(list);
		
		session.close();
	}
7.输出映射 resultType
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功
如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象
只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象
1.输出简单类型
	1.需求
	用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页

eg
1.映射文件

	<!-- 查询用户总数 -->
		<select id="findUserCount" parameterType="cn.mybatis.po.UserQueryVo" resultType="int">
			select count(*) from user where user.sex = #{userCustom.sex} and user.username like '%${userCustom.username}%'
		</select> 
2.接口定义
public int findUserCount(UserQueryVo userQuerVo) throws Exception;
3.测试类
	@Test
	public void testFindUserCount() throws Exception{
		//获取Session
		SqlSession session = sqlSessionFactory.openSession();
		//获取Mapper代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);
	
		UserQueryVo queryVo = new UserQueryVo();
		UserCustom userCustom = new UserCustom();
		//sql动态测试
		userCustom.setSex("1");
		userCustom.setUsername("明");
		queryVo.setUserCustom(userCustom);
		
		List<Integer> ids = new ArrayList<Integer>();
		ids.add(10);
		ids.add(22);
		queryVo.setIds(ids);
		
		int count = userMapper.findUserCount(queryVo);
		
		System.out.println(count);
		
		session.close();
	}
2.输出pojo对象和pojo列表
	不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType	指定的类型是一样的,在mapper.java指定的方法返回值类型不一样
		1.输出单个pojo对象,方法返回值是单个对象
		public User findUserById(int id) throws Exception;
		2.输出pojo对象list,方法返回值是List<pojo>
		public List<User> findUserByName(String username) throws Exception;
	生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne还是返回selectList
7.resultMap
mybatis中使用resultMap完成高级输出结果映射
	1.resultMap使用方法
	如果查询出来的列名和pojo的属性名不一致,通过定义一个resultType对列名和pojo属性名之间做一个映射关系
		1.定义resultMap
		2.使用resultMap作为statement的输出映射类型
	2.将下边的sql使用User完成映射
	Select id id_,username username_ from user where id=#{value}
	User类中属性名和上边查询列名不一致

eg

1.在映射文件定义resultMap
<!--	定义resultMap
	type java对象的类型 可支持别名
		id resultmap的唯一标识 -->
	<resultMap type="user" id="userResultMap">
		<!-- id表示结果集中唯一的标识
			column: 查询出来的列名
			property type指定的pojo类型的属性名-->
		<id column="id_" property="id"/>
		<!-- 定义普通字段
			column: 查询出来的列名
			property type指定的pojo类型的属性名-->
		<result column="username_" property="username"/>
	</resultMap>
	
	<!-- 使用resultmap输出映射 -->
	<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
		select id id_, username username_ from user where id = #{value}
	</select>
2.接口定义
public User findUserByIdResultMap(int id) throws Exception;
3.测试类
	@Test
	public void testFindUserByIdResultMap() throws Exception{
		//获取Session
		SqlSession session = sqlSessionFactory.openSession();
		//获取Mapper代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);
	
		User user = userMapper.findUserByIdResultMap(1);
		
		System.out.println(user);
		
		session.close();
	}
小结
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值