MyBatis模糊查询的实现方式有哪些

开发技术 作者:zzz 2024-05-07 19:05:01
本文小编为大家详细介绍“MyBatis模糊查询的实现方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis模糊查询的实现方式有哪些”文章能帮助大家...

本文小编为大家详细介绍“MyBatis模糊查询的实现方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“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模糊查询的实现方式有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注捷杰建站行业资讯频道。

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_24601.html
mybatis