mybatis查询方法传入参数

本文详细介绍了MyBatis中不同参数类型的查询方法处理,包括单个参数、多个参数、使用@Param注解以及传入Pojo和Map的情况。重点讲解了当有多个参数时,如何通过arg0、arg1或param1、param2等来正确引用参数,并建议使用@Param进行明确的键值定义,以避免参数封装混乱。同时,还展示了如何通过Map传入多个参数进行查询操作。
摘要由CSDN通过智能技术生成

mybatis查询方法传入参数

1)、单个参数

基本类型:

  • 取值:#{随便写}

2)、多个参数

public Employee getEmpByIdAndEmpName(Integer id,String empName);
  • 取值:#{参数名}是无效了
Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found.
            Available parameters are [arg1, arg0, param1, param2]

可用:arg1,arg2(参数的索引)或者是param1,param2(第几个参数paramN)

            原因:只要是传入了多个参数;mybatis会自动将这些参数封装在map中;、
                    封装时用的key就是参数的索引或者是参数的第几个表示
                      Map<String, Object> map = new HashMap<>();
                      map.put("1",传入的值);
                      map.put("2",传入的值);
             #{key}就是从这个map中取值

3)@Param:为参数指定key;命名参数;我们以后也推荐这么做

可以告诉mybatis,封装参数map的时候别乱配,使用我们指定的key(使用@Param)
例如:

    public Employee getEmpByIdAndEmpName(@Param("id") Integer id,@Param("empName") String empName);

4)、pojo(JavaBean)

  • 取值#{pojo的属性名}

5)、传入map:将多个要使用的参数封装起来

xml中的sql语句的编写

   <select id="getEmpReturnMap" resultType="map">
        select * from  t_employee where id=#{id}
    </select>
 /**
     * 通过传入map来进行查询
     */
    @Test
    public void testMap() {

        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.getSqlSession();
            EmployeeDao mapper = sqlSession.getMapper(EmployeeDao.class);
            Map<String, Object> map = new HashMap<>();
            map.put("id", 1);
            map.put("empName", "admin");
            map.put("tableName", "t_employee");
            Employee employee = mapper.getEmployeeByIdAndEmpName(map);
            System.out.println(employee);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            sqlSession.commit();
            sqlSession.close();
        }

    }

扩展:多个参数:自动封装map;

method01(@Param("id")Integer id , String empName , Employee employee);
            Integer id ->#{id}
           String empName->#{param2}
           Employee employee(取出这个里面的email) -> #{param3.email}
无论传入什么参都要能正确的取出值
            #{key/属性名}
            1)#{key}取值的时候可以设置一些规则;
            id=#{id,jdbcType=INT}
            javaType、jdbcType、mode. numericScale、resultMap、typeHandler、jdbcTypeName、expression
            只有jdbcType才可能是要被指定的
                    默认不指定jdbcType:mysql没问题,Oracle也没有问题;
                    万一传入的数据是null,mysql插入null值没有问题,
                    【Oracle不知道null是什么类型】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值