Mybatis学习笔记之传多个参数

单个参数:mybatis不会进行特殊处理#{参数名}:取出参数值

多个参数:mybatis会进行特殊处理。多个参数会封装成一个map

               key:param1.param2...paramN,或者参数的索引

               value:传入参数值

#{}就是从map中获取指定的key值:

操作:

        方法(两个参数均为基本类型):public Employee getEmpByIdAndLastName(Integer id,String name);

        方法(一个基本类型和一个对象):public void getIdUserUpdateUser(int id,User user);

异常:

    org.apache.ibatis.binding.BindingException:

    Parameter 'id' not found.

    Available parameters are [1, 0, param1, param2]

解决方法

   【命名参数】:明确指定封装参数时map的key;@Param("id")

    多个参数会被封装成 一个map,

        key:使用@Param注解指定的值

        value:参数值

    #{指定的key}取出对应的参数值

 方法(两个参数均为基本类型):public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("name")String name);

                                                    取值:id==>#{id/param1}   name==>#{name/param2}

 方法(一个基本类型和一个对象):public void getIdUserUpdateUser(@Param("id")int id,@Param("user")User user);

                                                    user中有{id,name,age,phone}

                                                    取值:id==>#{id/param1}   user==>#{param2.id,param2.age.../user.id,user.age...}

##特别注意:如果是Collection(List、Set)类型或者是数组,也会特殊处理。也是把传入的list或者数组封装在map中。

            key:Collection(collection),如果是List还可以使用这个key(list)数组(array)

public Employee getEmpById(List<Integer> ids);

    取值:取出第一个id的值:   #{list[0]}

#{}与${}的区别

优先#{},${}会涉及到sql的注入,有风险

具体分析https://blog.csdn.net/lohannes/article/details/79031435

#{}:更丰富的用法:

    规定参数的一些规则:

    javaType、 jdbcType、 mode(存储过程)、 numericScale、

    resultMap、 typeHandler、 jdbcTypeName、 expression(未来准备支持的功能);

 

    jdbcType通常需要在某种特定的条件下被设置:

        在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。比如Oracle(报错);

        

        JdbcType OTHER:无效的类型;因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理;

        

        由于全局配置中:jdbcTypeForNull=OTHER;oracle不支持;两种办法

        1、#{email,jdbcType=OTHER};

        2、jdbcTypeForNull=NULL

            <setting name="jdbcTypeForNull" value="NULL"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值