@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},'%')