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

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

这时候,就需要我们来编写pojo的包装器类型来封装更多的查询条件字段。

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类和查询条件类型的过度耦合)

pojo类:

package com.js.mybatis.po;
/**
 * 用户po类
 */
import java.util.Date;

public class User {
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
				+ ", birthday=" + birthday + ", address=" + address + "]";
	}
	private int id;
	private String username;
	private String sex;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	private Date birthday;
	private String address;
}


pojo扩展类:

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


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

package com.js.mybatis.po;
/**
 * pojo包装类型,将来在使用时从页面传到controller、service、mapper
 * 用于扩展mapper接口单一的参数类型
 * @author jiangs
 *
 */
public class UserQueryVo {
	private UserCustom userCustom;
	public UserCustom getUserCustom() {
		return userCustom;
	}
	public void setUserCustom(UserCustom userCustom) {
		this.userCustom = userCustom;
	}
}

编写测试用例:

package com.js.mybatis.mapper;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.js.mybatis.po.User;
import com.js.mybatis.po.UserCustom;
import com.js.mybatis.po.UserQueryVo;

public class UserMapperTest {
	SqlSessionFactory sessionFactory;
	@Before
	public void setUp() throws Exception{
		//创建SqlSessionFactory
		InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
		sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}
	
//	@Test
//	public void testFindUserById() throws Exception {
//		SqlSession sqlSession = sessionFactory.openSession();
//		//创建代理对象
//		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//		User user = userMapper.findUserById(1);
//		System.out.println(user);
//	}
	
//	@Test
//	public void testFindUserByName() throws Exception {
//		SqlSession sqlSession = sessionFactory.openSession();
//		//创建代理对象
//		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//		List<User> userlist = userMapper.findUserByName("某男男");
//		for(User user:userlist){
//			System.out.println(user);
//		}
//	}
//	@Test
//	public void testAddUser()throws Exception{
//		SqlSession session = sessionFactory.openSession();
//		UserMapper userMapper = session.getMapper(UserMapper.class);
//		User user = new User();
//		user.setAddress("mapper新增 addr");
//		user.setBirthday(new Date());
//		user.setSex("女");
//		user.setUsername("mapper新增 name");
//		userMapper.addUser(user);
//		session.commit();
//		session.close();
//	}
	@Test
	public void testFindUserList()throws Exception{
		SqlSession session = sessionFactory.openSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		UserQueryVo userQueryVo = new UserQueryVo();
		UserCustom userCustom = new UserCustom();
		userCustom.setAddress("mapper新增 addr1111");
		userCustom.setBirthday(new Date());
		userCustom.setSex("女");
		userCustom.setUsername("小明");
		userQueryVo.setUserCustom(userCustom);
		List<User> userlist = userMapper.findUserList(userQueryVo);
		System.out.println(userlist);
		session.close();
	}
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值