【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多参数及实体对象传递

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

mybatis中关于传入参数parameterType

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

Mybatis使用之参数传递

摘要: 主要记录Mybatis是如何映射传递的参数的。分四种来记录:1、java基本类型的传递、2、Java对象形式传递 3、多参数传递4、集合类型参数传递...

Mybatis框架中Mapper文件传值参数获取。【Mybatis】

Mybatis框架中,Mapper文件参数获取一般有以下几种: 1、参数个数为1个(string或者int) dao层方法为以下两种: /** * 单个int型 */ public Lis...
  • Abubu123
  • Abubu123
  • 2016年11月22日 11:55
  • 10009

MyBatis之传入参数

在MyBatis的select、insert、update、delete这些元素中都提到了parameterType这个属性。MyBatis现在可以使用的parameterType有基本数据类型和JA...

MyBatis传入多个参数,传入数组和列表数据的处理

java定义: List selectByRoleIdList(@Param("roles")String[] roles); List selectByRoleIdList1(@P...
  • mlz_2
  • mlz_2
  • 2016年11月01日 11:52
  • 6877

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

下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: ...

Mybatis学习(十一)mybatis动态sql传入pojo的包装类型

学习Mybatis框架的话,如果没有学习他的动态sql的话等于白学了,浪费你的时间了,所以一定要学习Mybatis的动态sql,体验它的灵活性。 需求分析: 学习Mybatis框架sql的动态灵活性。...

一步一步弄懂angularJS基础

问题1:ng-app指令的使用以及自定义指令 Hi everyone!',这一点很重要的--> 我们看看指令本身的代码是如何定义的 var myMo...

MyBatis传递参数的四种方案(包括SQL间传递)

最常见的是下边这三种: 第一种方案  DAO层的函数方法  Public User selectUser(String name,String area); 对应的Mapper.xml...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MyBatis】——输入映射传递pojo的包装对象
举报原因:
原因补充:

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