需求:完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)
一、自定义包装类型pojo
包装类型的pojo中将复杂的查询条件包装进去
比如说要包装用户的查询信息
public class UserQueryVo { //所需要的查询条件 private User user; }
这样包装的话,如果User实体类型不能满足查询条件的话,就需要修改User,但是这个User有可能是生成工具生成的,不能随便修改,所以在包装类时,不要包装User类,可以包装User的扩展类
创建一个User的扩展类
public class UserExtend extends User { }
然后再包装
public class UserQueryVo { //查询用户条件 private UserExtend userExtend; //查询订单条件 private OrderExtend orderExtend; public UserExtend getUserExtend() { return userExtend; } public void setUserExtend(UserExtend userExtend) { this.userExtend = userExtend; } public OrderExtend getOrderExtend() { return orderExtend; } public void setOrderExtend(OrderExtend orderExtend) { this.orderExtend = orderExtend; } }
配置mapper.xml
<select id="findUserlist" parameterType="com.xxx.mybatis.po.UserQueryVo" resultType="com.xxx.mybatis.po.UserExtend"> select * from t_user where sex = #{userExtend.sex} and userName LIKE CONCAT('%',#{userExtend.username},'%' ) </select>
mapper.java
public List<UserExtend> findUserlist(UserQueryVo vo);
测试代码
@Test void testFindUserList() { UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class); UserQueryVo queryVo=new UserQueryVo(); UserExtend userExtend=new UserExtend(); userExtend.setSex("0"); userExtend.setUsername("小"); queryVo.setUserExtend(userExtend); List<UserExtend> list = userMapper.findUserlist(queryVo); System.out.println(list); }