mybatis(9)--输入映射

本文介绍如何在MyBatis中通过自定义POJO进行复杂查询,包括创建UserCustom和UserQueryVo两个类,并展示如何在mapper.xml文件中配置SQL查询语句以及在mapper接口中编写相应的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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=广州佛山]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值