mybatis中的极易出现错误用法
1.背景
今天下午开会的时候,领导分配了一个任务说需要去完成一个商品录入的功能,可以通过模糊查询去识别物品,当时听到这个之后就觉得好简单,索性就交给手底下的实习生去做,刚好可以让他去练练手吧,想着能来实习的实习生毕竟还是有一定的水平的,不然也不会说到这实习,于是信心满满的交给他了。
2.交互过程
跟他讲完需求点之后,给了他两个小时的时间去完成这个接口的实现,他也信心满满的跟我讲,用不了两个小时,一个小时足以,于是我就去忙我手头的任务去了,他就在那敲代码。
3.交付过程
眼看马上要三个小时了,我问他怎么还没有提交呢,是不是有什么卡点,然后他就跟我说,感觉自己的逻辑没有问题啊,就是简单的crud,没什么难度啊,为什么收不到信息呢,举个例子,我输入电脑,就会给出,戴尔电脑,苹果电脑,联想电脑,等等,结果他写的这个,输进去之后没反应,于是我就让他把现有的代码git上去,我帮他看一下,看了对应的业务语句,除了可能存在空指针的异常外,其他的代码业务也还正常,于是就在xml里面看,果然映入眼帘的语句
<select id="queryByName" resultType="Product">select * from product where name like '%#(name)%'
</select>
我就知道问题的所在了,给你们打印一下sql的日志让你们看一下,就明白了,看着这样写没毛病啊为什么出不来呢
select * from product where name like '%?%'
不是大哥,这模糊查询也不能这么模糊吧,于是我又问了他一遍知道问题所在吗,他当时给我的解释是,会不会是自己前面传参的时候,传的对象不对,导致没有获取到真正的name,大哥,你好歹来实习了,这个问题要是还能翻车,那不是要被劝返,然后我就让他去日志看报错,才恍然大明白。
4.解决方案
不说你们应该也知道了吧,加一个concat这个问题就解决了
<select id="queryByname" resultType="Product">select * from product where name like concat ('%',#{name},'%')
</select>
看着是一个小问题,但是有的时候就是会眼高手低。