mybatis问题小计——传入参数报错(Not Found)

 <select id="selectAllUserByAgeIsAseOrDesc" resultType="mybatis.pojo.User">
                  select *
                  from t_user order by #{sortBy} ${sc};
          </select>
  List<User> selectAllUserByAgeIsAseOrDesc(String sortBy,String sc);

这里遇到一个问题
  我想传入排序方式和根据什么字段来排序,运行时总说找不到sc这个字段
提示信息说【arg0 arg1 param1 param2】可以用,我把sc改为arg1,运行,
在一次报错说找不到sortBy了,怎么回事,传入一个参数的时侯就能找到??
在查阅资料后:

  • 如果传入的参数是一个 Java Bean

    • 那么 MyBatis 会使用反射获取该对象的所有 getter 方法,并将方法返回值作为 SQL 语句的参数。MyBatis 会根据参数名称和 getter 方法名进行匹配,如果存在匹配的 getter 方法,则将其返回值作为 SQL 参数;如果不存在匹配的 getter 方法,则抛出异常。
  • 如果传入的参数不是一个 Java Bean, 并且参数数量是一个,

    • 则直接将该参数作为 SQL 语句的参数。
      • 此时,传入参数的名称与方法形参的名称不需要完全匹配,只需要满足以下规则之一即可:
        1、当方法只有一个参数的时候:
          传入参数的名称和方法形参的名称相同;
          传入参数的名称为 “param”,方法只有一个参数,且该参数没有注解
        2、如果方法存在多个参数,且没有使用 @Param 注解指定参数名称, 则 MyBatis 会给每个参数自动生成一个名称,名称的格式为 “param” + 参数序号(从 1 开始)。 在 XML 配置文件中,可以使用 “#{}” 占位符来表示方法参数。
  • 到这里疑问解决,
     因为我传入的参数不是一个Javabean,没有对应的getter方法能调用。而且,我传入的参数不止一个,满足了 不是Javabean参数数量大于一这两个条件,

    • 那么mybatis底层就会自动为这两个参数生成名称 为【arg0 arg1 ……或者 param1 param2……】
      然后还因为我传入的参数名称和底层给的不同,所以才会报错,
  • 最后,
       将传入的参数的名称改为arg0,arg1问题解决

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值