parameterType传入参数为包装类\Map

一、传入包装类

java是面对对象编程的,有些基本数据类型不能面向对象编程,把我们需要的数据类型封装进一个类里进行使用,形成包装类。(这是我自己的浅薄的理解)
我在网上参考了一些别人的文章。我觉得以下两篇写的很好,把他们的链接贴出来,学习!
https://www.cnblogs.com/javastack/p/9644520.html
https://blog.csdn.net/weixin_40739833/article/details/80093527

在mybatis操作时,有时会遇到查询多表数据,这时候可能需要一个包装类将多个实体类封装起来进行查询。这里封装一个最简单的User类进行示范。

1、编写包装类findByIdByVo

package com.zwj.VO;

import com.zwj.model.User;

import java.util.List;

public class findByIdByVo {
    private User user;
    
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

2、在mapper文件中添加方法,此时参数应为包装类findByIdByVo

public User findUser(findByIdByVo finduserbyvo);

3、在映射文件中,编写映射,

<select id="findUser" parameterType="com.zwj.VO.findByIdByVo" resultType="user">
       <!--以下user.id是包装类中的属性user字段的属性-->
        select * from user where id=#{user.id}
    </select>

4、测试

@Test
    public void test1(){
        findByIdByVo user=new findByIdByVo();
        User user1=new User();
        user1.setId(10);
        user.setUser(user1);
        UserMapper userMapper=session.getMapper(UserMapper.class);
        User user2=userMapper.findUser(user);
        System.out.println(user2);

    }

在这里插入图片描述
我发现大家在配置映射文件时返回参数都写我们所需要的实体类(在上面的例子中我也是这样)。我想为什么没人写包装类呢?然后我就试了一下,其实是可以的,但是在映射文件中一定要为包装类的属性配置resultMap,不然的结果就是可以查出来,但是输出打印的时候会报空指针错误。
思考了一下,返回参数设置为包装类会比较麻烦,因为每次都要为里面的属性配置resultMap,如果属性中有多个实体类这就更麻烦了。所以还是返回参数直接设置为我们需要的实体类模型就可以了。
返回包装类和返回实体类代码基本差不多,改一个返回类型,然后在映射文件中添加一个resultMap就可以,我就不贴啦。

二、传入Mapwo

1、在mapper接口中添加方法

 public List<User> findUserListByMap(Map<String,Object> map);

2、编写映射文件,注意传入参数是hashMap

<select id="findUserListByMap" parameterType="hashMap" resultType="user">
      <!--占位符里面的username,sex要跟测试代码压入map里面的变量名称一样-->
        select * from user where username like '%${username}%' and sex=#{sex}
    </select>

3、测试

 @Test
    public void test2(){

        UserMapper userMapper=session.getMapper(UserMapper.class);

        Map<String,Object> map=new HashMap<String,Object>();
        //把参数put进去
        map.put("username","张");
        map.put("sex","2");

        List<User> list=userMapper.findUserListByMap(map);
        System.out.println(list);
        //session.commit();
    }

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值