mybatis(9)--输入映射

来源:互联网 发布:简述js的事件委托 编辑:程序博客网 时间:2024/06/18 12:12

1.输入映射
通过parameterType指定输入参数类型,类型可以是简单类型,hashmap,pojo的包装类型
但是有时我们的需求传入的查询条件很复杂(可能包括用户信息,商品,订单信息等)

此时我们可以根据这个需求来自定义包装类型的pojo
在包装类型的pojo中将复杂的查询条件包装进去

package com.ddd.mybatis.pojo;/** * 一般的user是使用逆向工程代码来生成,不可变,那如果想要扩展可以使用继承 * @author Dan * */public class UserCustom extends User{    //自定义一些扩展属性}
package com.ddd.mybatis.pojo;/** * 根据特殊需求自定义的包装类 * @author Dan * */public class UserQueryVo {    private UserCustom userCustom;    public UserCustom getUserCustom() {        return userCustom;    }    public void setUserCustom(UserCustom userCustom) {        this.userCustom = userCustom;    }}

这两个特殊需要的pojo类我们就算完成了,那么接下来就是编写sql,修改mapper.xml
首先在这个数据库中走一遍
这里写图片描述

代码实现如下:

<!-- 综合查询用户信息 -->    <select id="findUserList" parameterType="com.ddd.mybatis.pojo.UserQueryVo" resultType="com.ddd.mybatis.pojo.UserCustom">        SELECT * FROM USER WHERE user.sex=#{userCustom.sex} AND user.username LIKE '%${userCustom.username}%'    </select>

接下来写相应的mapper接口方法:

//综合查询用户信息    public List<UserCustom> findUserList(UserQueryVo userQueryVo);

然后测试:

@Test    public void testFindUserList() {        //由于之前是在UserDaoImpl中每次获取sqlSession,所以这里需要我们手动写        SqlSession sqlSession=sqlSessionFactory.openSession();        //mybatis自动生成mapper代理对象,代理对象内部调用selectOne或者selectList        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);        //调用userMapper的方法,但这里如果不小心用一个单个user来接收,那会报错        UserQueryVo userQueryVo=new UserQueryVo();        UserCustom userCustom=new UserCustom();        userCustom.setSex("男");        userCustom.setUsername("张伟");        userQueryVo.setUserCustom(userCustom);        List<UserCustom> list=userMapper.findUserList(userQueryVo);        System.out.println(list);    }

测试结果:
日志就不打印了…
下面这个是结果

[User [id=6, username=大张伟, sex=男, birthday=Mon Jul 17 00:00:00 CST 2017, address=广州佛山], User [id=8, username=大张伟, sex=男, birthday=Mon Jul 17 00:00:00 CST 2017, address=广州佛山], User [id=10, username=大张伟, sex=男, birthday=Mon Jul 17 00:00:00 CST 2017, address=广州佛山]]