MyBatis踩坑:模糊查询不封装参数问题

@Select("select * from PMJLB where `N000-土系志位置` like '%#{city}%'")
    public List<Map<String, Object>> getDataByCityName(String city);

看以上这条SQL语句,我想通过city这个参数进行模糊查询,但是在查询过程中发现,city参数并没有被封装进SQL语句中,导致无法查询。

原因在于:加上单引号后,like后的内容就当成是一个字符串,而#{ }写在字符串中不能识别,要改写成${ }这种形式。

但是通过$的方式拼接的sql语句,不再是以占位符的形式生成sql,而是以拼接字符串的方式生成sql,这样做带来的问题是:会引发sql注入的问题。

如果既能够解决sql注入又能在配置文件中写%该如何实现呢,可以借助mysql的concat函数。

即:将SQL语句修改为如下

select * from PMJLB where `N000-土系志位置` like concat('%',#{city},'%')

 

AnonyEast

一个爱折腾的技术萌新

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐