mybatis中关于查询传参的问题

<choose><whentest="_parameter!=''">WHERELOCATE(#{keyword},p.project_name,1)>0</when><... <choose>
<when test="_parameter!=''">
WHERE LOCATE(#{keyword}, p.project_name,1)>0
</when>
</choose>

根据关键字查询数据,为什么判断条件是“_parameter” 而不是用输入的关键字来判断,然后为什么条件语句是“LOCATE(#{keyword}, p.project_name,1)>0”,而不是“p.project_name = #{keyword}”, 最后条件语句中的“1”是什么意思?

谢谢!
展开
 我来答
貌似風輕
2018-08-04 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:701万
展开全部
不使用@Param注解时
当传入的参数只有一个时,在test语句中必须使用 _parameter 获取这个参数
在sql中则 #{}可以通过任意的key来获取这个参数
所以这里when test 中使用的_parameter代表这个参数,而在sql中使用#{keyword}代表这个参数
LOCATE(substr,str,pos) 这是sql的函数,返回第一次出现在字符串str的子串substr的位置,从位置pos开始,substr不在str中,则返回0。
所以LOCATE(#{keyword}, p.project_name,1)>0 和 p.project_name = #{keyword} 是不一样的条件。它等价于 p.project_name like ‘%#{keyword}%’,当然这里不能直接这么写,要使用like在mybatis的sql中需要使用CONCAT函数。
LOCATE(#{keyword}, p.project_name,1)>0 等价于 p.project_name like CONCAT('%',#{keyword},'%')
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式