【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 2016年05月31日 15:34:02

                在平时的开发中,不一定就是单纯的对一个实体进行增删改查,例如完成用户信息的综合查询,有时需要传入查询条件很复杂,可能包括用户信息、关联表的其它信息等。针对这种需求,在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接口类就可以。而使用自定义的包装类后,就可以对一些复杂的查询条件进行扩展,相当于一个实体对象对另外一个对象的引用,对两个对象或者说是对一些需要的属性进行封装,这样就可以给查询条件或者查询结果一个载体。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

mybatis之sql传递参数映射(六)

1.传递包装类 User类public class User { private int id; private String username;// 用户姓名 privat...

mybatis中关于传入参数parameterType

众所周知,mybatis的传入参数可以是各种Java的基本数据类型:包含int,String,Date等。基本数据类型作为传参,只能传入一个。通过#{参数名} 即可获取传入的值 ,复杂数据类型:包含J...
  • Truong
  • Truong
  • 2013-12-11 22:04
  • 131579

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Mybatis多参数及实体对象传递

在使用Mybatis的时候,经常会有各种各样的参数传递,不同类型,不同个数的参数。 先上个例子: public List findOfficeList(@Param("lifetouchRel...

【Mybatis框架】输入映射-pojo包装类型

下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: 更多文章
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)