关于MyBatis模糊查询的几种实现方式
作者:柚子猫屿 发布时间:2023-05-09 04:23:12
标签: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
来源:https://blog.csdn.net/qq_41861832/article/details/128243734
0
投稿
猜你喜欢
- 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,
- 这篇文章主要介绍了Spring boot整合log4j2过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 效果展示在实际项目当中我们经常看到如下各种剪裁形状的效果,Flutter 为我们提供了非常方便的 Widget 很轻松就可以实现,下面我们来
- 单行文本的输入存在严重的缺陷,也不适合实际的运用,本节通过一个无功能的记事本来介绍可以进行多行输入的JTextArea:JTextArea(
- 1. 自动化装配介绍Spring Boot针对mvc做了大量封装,简化开发者的使用,内部是如何管理资源配置,Bean配置,环境变量配置以及启
- Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无
- 现在有一张订单表t_stockorder,其拥有id、code、client_id、merchandise_id、merchandise_n
- 比如在类上使用该注解 @Alias("dDebtEntity")则在mapper.xml文件中resultType=&q
- SharedPreferences在开发过程中,数据存取是较为频繁的,今天我们来了解下android几种常见的数据存取方式。在Android
- 这篇文章主要介绍了Java中遍历ConcurrentHashMap的四种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理
- 1、Service层:业务层–>控制业务业务模块的逻辑功能设计,和DAO层一样都是先设计接口,再创建要实现的类,然
- 假定你已经了解了运行时的数据区域和常用的垃圾回收算法,也了解了Hotspot支持的垃圾回收器。一、cpu占用过高cpu占用过高要分情况讨论,
- 一、概述我们对于这个图片肯定会非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在数据结构中我们了解到可以
- C++对string进行大小写转换操作方法方法一:使用C语言之前的方法,使用函数,进行转换#include <iostream>
- 前言我们知道在Java中除了基础的数据类型以外,其它的都为引用类型。而Java根据其生命周期的长短将引用类型又分为强引用、软引用、弱引用、幻
- 修改FeginCilent定义的服务名到指定服务通过覆盖类来修改对应的服务名,这里将所有的FeginClient对应的服务名都修改好。pac
- 目录前言令牌中继令牌难道不能在Feign自动中继吗?实现令牌中继InheritableThreadLocal实现令牌中继总结前言在Sprin
- 1、通过查找API文档:2、Map.Entry是一个接口,所以不能直接实例化。3、Map.entrySet( )返回的是一个collecti
- 这篇文章主要介绍了Java如何基于ProcessBuilder类调用外部程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的