如下所示,吴老二就到顶了。
那Mybatis脚本怎么写呢?
就这么写👇🏻
select * from user t
order by t.login_name=#{req.currentUser} desc
OK,需求完成,测试,摸……
嗯,出bug了……
======================================================================
定晴一看控制台,报错了。
最关键的一行:
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
======================================================================
问题很简单,随手一查,原因是:
#{}传过来的参数带单引号
#{}
采用预编译机制,是占位符,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值。
这种方式,order by 最后的sql会多加单引号 ’ 。
那怎么解决呢?
可以用 ${}
。${}
是拼接符,直接字符串替换。
select * from user t
order by t.login_name=${req.currentUser} desc
我不想用${}
这种方式,因为有sql注入的风险,那该怎么办呢?
好吧,其实主要是这种方式也报错了😓。
java.sql.SQLSyntaxErrorException: Unknown column ‘wulaoer’ in ‘order clause’
我们平时模糊查询怎么写呢?
——使用CONCAT()
函数来拼接keyword。
以此类推,那我用一个函数来去掉'
不就行了。
那用一个什么函数呢?
——REPLACE
所以写法就变成了这样:
select * from user t
order by t.login_name=REPLACE(#{req.currentUser},‘’‘,’') desc
======================================================================
OK,最终问题解决。
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
[外链图片转存中…(img-gS0LDPiF-1721147256810)]