mybatis遇到的错误

org.apache.ibatis.binding.BindingException: Parameter 'userId' not found.


原因: 在mapper接口中: 参数网@Select语句传递过程中找不到,当方法只有一个参数的时候可以实现。

@Select("select * from a_info_master where type = 1 or user_id = #{userId} order by #{orderBy}  #{order}")
public List<InfoMaster> select(Long userId,String orderBy,String order);
 但是当方法有多个参数的时候,应该在每个参数前面添加@Param(xxx)才能够正常传参!!!
应该改成:
@Select("select * from a_info_master where type = 1 or user_id = #{userId} order by ${orderBy}  ${order}")
public List<InfoMaster> select(@Param("userId") Long userId, @Param("orderBy") String orderBy, @Param("order") String order);

 
后来还报了很多错误:
注意:
@Select("select * from a_info_master where type = 1 or user_id = #{userId} order by ${orderBy}  ${order}")
public List<InfoMaster> select(@Param("userId") Long userId, @Param("orderBy") String orderBy, @Param("order") String order);
字段和顺序都应该用$符来修饰!!!

注:Mybatis 中在传参时,$ 和# 的区别:

MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和Java自定义类型。
在SQL中引用这些参数的时候,可以使用两种方式#{parameterName}或者${parameterName},
    首先,我们说一下这两种引用参数时的区别,使用#{parameterName}引用参数的时候,Mybatis会把这个参数认为是一个字符串,例如传入参数是“Smith”,那么在SQL(Select * from emp where name = #{employeeName})使用的时候就会转换为Select * from emp where name = 'Smith';
   同时在SQL(Select * from emp where name = ${employeeName})使用的时候就会转换为Select * from emp where name = Smith。
   再次,从安全性上考虑,能使用#尽量使用#来传参,因为这样可以有效防止SQL注入的问题。

最后总结一下必须使用$引用参数的情况,我能想到的目前只有一种,那就是参数的int型的时候,必须使用$引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值