关于MyBatis模糊查询的几种实现方式
一、模糊查询的几种实现方式
1.concat函数和#{}拼接的方式
student_name like concat('%',#{studentName},'%')
2.%和${}拼接的方式
student_name like '%${studentName}%'
3.concat函数和${}拼接的方式
student_name like concat('%','${studentName}','%')
4.||和#{}拼接的方式
student_name like '%'||#{studentName}||'%'
分析: (1)${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,可能引发sql注入。 (2)#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,使用占位符的方式提高效率,可以防止sql注入。因此最好使用#{ }方式。 (3)concat函数最好不要使用,最好使用||,因为在Oracle中,concat()只能对两个字符串进行拼接(字符串多的话只能嵌套使用),而||可以对字符串无限拼接。
5.建议使用的方式
建议使用第四种哦,示例:
<if test="studentName != null and studentName !=''"> and student_name like '%'||#{studentName}||'%' </if>
二、用mybatis出现的一些问题
1.一般查询条件的使用
在mapper文件里面关于查询if的条件基本都要写出两种空值,否则就会在查询时把其他不需要的数据也查出来。
错误示范:
<if test="studentName != null"> and student_name = #{studentName} </if>
正确示范:
<if test="studentName != null and studentName !=''"> and student_name = #{studentName} </if>
2.日期查询条件的使用
这个是在写日期查询条件时,出现了日期只能修改,但不能为空的问题:
错误示范:
<if test="effDate != null and effDate !=''"> and eff_date = #{effDate} </if> <if test="expDate != null and expDate !=''"> and exp_date = #{expDate} </if>
正确示范:去掉外面的if判空条件
and eff_date = #{effDate} and exp_date = #{expDate}
3.排序问题
查询时最好按id倒序,在修改之后不影响原有顺序
比如:order by student_id desc
到此这篇关于关于MyBatis模糊查询的几种实现方式的文章就介绍到这了,更多相关MyBatis模糊查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
如何用java程序(JSch)运行远程linux主机上的shell脚本
这篇文章主要介绍了如何用java程序(JSch)运行远程linux主机上的shell脚本,帮助大家更好的理解和学习,感兴趣的朋友可以了解下2020-08-08以Spring Boot的方式显示图片或下载文件到浏览器的示例代码
这篇文章主要介绍了以Spring Boot的方式显示图片或下载文件到浏览器的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01基于spring+springmvc+hibernate 整合深入剖析
这篇文章主要介绍了于spring+springmvc+hibernate整合实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10SpringBoot中实现分布式的Session共享的详细教程
这篇文章主要介绍了SpringBoot中实现分布式的Session共享,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-06-06
最新评论