mybatis 传递pojo的包装对象

需求:完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)

一、自定义包装类型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;
    }
}
View Code

配置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);
    }
原文地址:https://www.cnblogs.com/WarBlog/p/14931420.html