【MyBatis】——输入映射传递pojo的包装对象

在MyBatis开发中,面对复杂的查询条件,可以通过创建包装POJO对象来处理。本文介绍了如何在Mapper接口和XML映射文件中使用自定义包装对象,遵循命名规范,实现根据ID查询用户和插入用户信息的功能。

                在平时的开发中,不一定就是单纯的对一个实体进行增删改查,例如完成用户信息的综合查询,有时需要传入查询条件很复杂,可能包括用户信息、关联表的其它信息等。针对这种需求,在mybatis中我们可以使用自定义的包装类型的pojo,在包装类型的pojo中将复杂的查询条件包装进去。

/**
 * 用户包装类型
 * @author Arlene-xu
 *
 */
public class UserQueryVo {
	//在这里包装所需要的查询条件
	//用户查询条件
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	//可以包装其他的查询条件,比如订单、商品
	//....
}

mapper.xml

<!-- 用户信息综合查询 
	#{userCustom.sex}:取出pojo包装对象中性别值
	${userCustom.username}:取出pojo包装对象中用户名称
-->
<select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">
	SELECT * FROM USER WHERE user.sex=#{userCustom.sex} AND user.username=#{userCustom.username}
</select>

Mapper.java

//用户信息综合查询

public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;


说明:这里使用的是mapper代理方法,只需要写mapper接口,mapperx.ml映射文件和mapper接口在同一命名空间下。目的是为了对下边的代码进行统一生成。

                User user= sqlSession.selectOne("test.findUserById", id);

                sqlSession.insert("test.insertUser",user);

                。。。。


但是需要遵循一些开发规范:

                1、在mapper.xmlnamespace等于mapper接口地址

                          

                2mapper.java接口中的方法名和mapper.xmlstatementid一致

                3mapper.java接口中的方法输入参数类型和mapper.xmlstatementparameterType指定的类型一致。

                4mapper.java接口中的方法返回值类型和mapper.xmlstatementresultType指定的类型一致。

 

测试代码

//用户信息的综合查询
@Test
public void testFindUserList() throws Exception {
	SqlSession sqlSession=sqlSessionFactory.openSession();

	//创建UserMapper对象,mybatis自动生成mapper代理对象
	UserMapper userMapper= sqlSession.getMapper(UserMapper.class);
	
	//创建包装对象,设置查询条件
	UserQueryVo userQueryVo=new UserQueryVo();
	UserCustom userCustom=new UserCustom();
	userCustom.setSex("1");
	userCustom.setUsername("张三丰");
	userQueryVo.setUserCustom(userCustom);
	
	//调用userMapper的方法
	List<UserCustom> list=userMapper.findUserList(userQueryVo);
	sqlSession.close();
	System.out.println(list);
}

                mapper.xml文件进行了规范之后,在dao层接口中就不用再mapper.xml文件了,因为它们在同一个命名空间之下。不必再写Dao接口和实现类,只需要一个mapper接口类就可以。而使用自定义的包装类后,就可以对一些复杂的查询条件进行扩展,相当于一个实体对象对另外一个对象的引用,对两个对象或者说是对一些需要的属性进行封装,这样就可以给查询条件或者查询结果一个载体。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值