mybatis编写POJO包装类型扩展parameterType字段

入门mybatis时,做的demo都是借助一个pojo类来传递参数到sql语句中,但现实的项目场景中,查询条件往往很复杂,比如:查询条件可以有user信息,商品信息,订单信息等。

一般不能随意改动po包下的pojo类(即逆向工程自动生成的),此时就需要我们来编写pojo的包装类型来封装更多的查询条件字段。

准备:1.原始pojo类  2.原始pojo的子类  3.包装类

1、先在mapper.xml中定义sql语句,如下:

<!-- 自定义查询条件查询,借助定义pojo包装类型实现
		 parameterType:指定包装类型,将不同的参数(可以是pojo,也可以是简单类型)传入进去
		 包装类型的好处:
	 -->
	<select id="findUserList" parameterType="userQueryVo" resultType="user">
		select * from user where username like '%${userCustom.username}%'
	</select>

2、定义包装器类型,借助原pojo类的子类型(具体的字段扩展在子类中进行,避免pojo类和查询条件类型的过度耦合)

             2.1原始pojo类:


public class User {
	
	private int id;
	private String username;
	private String sex;}

         2.2.原始pojo扩展类,也即子类:

/**
 * User扩展对象
 * 用于继承user类,直接获取user对象的字段
 * 并添加一些扩展字段
 * @author jiangs
 *
 */
public class UserCustom extends User{
	//可以添加一些user类中没有的字段
	//...
}

       2.3.pojo包装类(parameterType中使用此类):

/**
 * pojo包装类型,将来在使用时从页面传到controller、service、mapper
 * 用于扩展mapper接口单一的参数类型

 *
 */
public class UserQueryVo {
	private UserCustom userCustom;
//提供get set方法,作为参数传进来
	public UserCustom getUserCustom() {
		return userCustom;
	}

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

3、编写测试用例(主要代码)

  1. @Test
    	public void testFindUserList()throws Exception{
    		SqlSession session = sessionFactory.openSession();
    		UserMapper userMapper = session.getMapper(UserMapper.class);
    //new
    		UserQueryVo userQueryVo = new UserQueryVo();
    //new
    		UserCustom userCustom = new UserCustom();
    	    userCustom.setSex("女");
    		userCustom.setUsername("小张");
    //传对象
    		userQueryVo.setUserCustom(userCustom);
    		List<User> userlist = userMapper.findUserList(userQueryVo);
    		System.out.println(userlist);
    		session.close();
    	}
    

猜你喜欢

转载自blog.csdn.net/yong97go/article/details/81208227