我们知道在mybatis的映射中传参数,只能传入一个。通过#{参数名} 即可获取传入的值。

Mapper接口文件:

public int delete(int id) throws Exception;
1
MapperL配置文件:

<delete id="delete" parameterType="int">
delete from user where id=#{id}
</delete>
1
2
3
接口中我们定义了delete(int id),形参的名称为id。顺理成章的在sql段里就用#{id}去获取。
其实这里的”参数名”可以是任意的。
因为JAVA反射只能获取方法参数的类型,但无从得知方法参数的名字的
上面这个例子把#{id}换成#{di},一样运行。当然为了便于阅读代码,还是用#{id}。
_parameter则是java对通过反射获取参数后,给参数取的别名。所以用#{_parameter}也行。

但有几种情况你必须得用_parameter:

第一种情况:拼接字符${}。咱这里先不去考虑SQL注入这些问题。

public List<User> findByName(String searchkey) throws Exception;
1
<select id="findByName" parameterType="String" resultType="twm.mybatisdemo.pojo.User">
select * from user where username like '%${searchkey}%'
</select>
1
2
3
因为要使用模糊查询。要在入参前后加上%,所以不能用占位符#{},而要用拼接字符串。因此我们理所当然的接入。因此我们理所当然的接入{searchkey}
一切都似乎没有问题,运行,报错:
Exception in thread “main”
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘searchkey’ in ‘class java.lang.String’ ### Cause:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘searchkey’ in ‘class java.lang.String’

问题就出在拼接字符串${searchkey}。和占位符#{}不同的是,java不会自动将${searchkey}对应成_parameter。因此只能自己写

<select id="findByName" parameterType="String" resultType="twm.mybatisdemo.pojo.User">
select * from user where username like '%${_parameter}%'
</select>
1
2
3
OK,一切又正常了。
可是你没有觉得这种写法太不赏必悦目了?

mybatis考虑到这点,你只需在接口的方法参数前加上param注解就好了。
public List<User> findByName(@Param(value="searchkey") String searchkey) throws Exception;

第二种情况:动态SQL中的条件判断语句中

public List<User> findByName(String searchkey) throws Exception;
1
<select id="findByName" parameterType="String" resultType="twm.mybatisdemo.pojo.User">
<bind name="likestr" value="'%'+ searchkey +'%'"></bind>
select * from user
<where>
<if test="searchkey !='' and searchkey !=null">
username like #{likestr}
</if>
</where>
</select>
1
2
3
4
5
6
7
8
9
在if和bind元素中涉及到参数searchkey。直接使用searchkey也会报上面一样的错误
解决办法就是用_parameter替换searchkey

或者在接口的方法参数前加上param注解。

public List<User> findByName(@Param(value="searchkey") String searchkey) throws Exception;
---------------------

原文:https://blog.csdn.net/soonfly/article/details/63385018

最新文章

  1. Flexible 弹性盒子模型之CSS flex-grow 属性
  2. 导入maven工程错误
  3. GPS部标监控平台的功能设计(一)-功能列表
  4. geoserver使用curl发布 imagemosaic
  5. javascript(js)小数精度丢失的解决方案
  6. C#设计模式——外观模式(Facade Pattern)
  7. 【软件工程】week5-个人作业-敏捷开发方法初窥
  8. angularJs 问题
  9. mysql中文乱码的一点理解
  10. [BZOJ 2594] [Wc2006]水管局长数据加强版 【LCT】
  11. Python中的正斜杠与反斜杠
  12. Java学习笔记14(面向对象七:final、static)
  13. 什么是TensorBoard?
  14. How to Make a Computer Operating System
  15. Http请求报头设置
  16. Confluence 6 配置附件大小
  17. Luogu4547 THUWC2017 随机二分图 概率、状压DP
  18. Pytest运行测试用例的多种方式和调试
  19. 修改AIX Noncomp内存占用比
  20. [转]UI-Grid HeaderCellClass

热门文章

  1. 树莓派USB存储设备自动挂载并通过脚本实现自动拷贝,自动播放视频,脚本自动升级等功能
  2. oa_mvc_easyui_删除(6)
  3. php 技术点积累
  4. bzoj 4722 由乃
  5. css折叠表格
  6. 自定义zabbix中的普通KEY及LLD KEY
  7. Mac 常用软件
  8. golang连接activemq,发送接收数据
  9. django笔记一
  10. python之django_form组件笔记