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”是什么意思?
谢谢! 展开
<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”是什么意思?
谢谢! 展开
展开全部
不使用@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},'%')
当传入的参数只有一个时,在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},'%')
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询