mybatis中模糊查询的使用以及一些细节问题的注意事项
页面有个功能 为 根据 品牌名进行 关键字查询,对应到数据库的是brand表的name字段的模糊查询
如果用的是SSM框架,在mybatis中我们需要自己写sql语句,涉及到like的模糊查询,mybatis中我们通常会使用#{}或${}来获取pojo对象的变量值。
这两个区别为 #{} 会在 变量外侧 加上 单引号 如 select * from brand where name='牌1'
${} 并不会 加单引号 如 select * from brand where name=牌1 显然这样会有问题。所有通常我们用${}需自己加上单引号 如 '${name}' 。
但我们应尽量避免使用 ${} ,因为这个最终会将参数拼接到 sql语句上,存在sql注入的问题。但#{}不会,#{}类似于 hibernate中的 select * from brand where name=:name 然后再通过 query.setParameter('参数名',参数值)这种方式。
但是在 模糊查询中 会出现一个问题, 模糊查询通常都是 与 % 配合使用, 所以我们最终想要的结果是如下这种
select * from brand where name like '%牌%' , 也就是说 我们需要将 两个百分号 与 ‘牌’ 这个字进行字符串拼接。
有人会 想到 用 '%${name}%' 用这种方式,但是这种方式并不好,上面说了,有sql注入的风险。
我们可以采用 and name like concat('%',#{name},'%') 这种方式来进行字符串拼接。
还有一个要说的是,我们在 mybatis 维护sql的 配置文件中。 肯定会判断 <if test="name!=null"> 即 name这个变量是否为空。 但是如果这个对象 为 空字符串 就会大大影响我们查询的效率。
如下所示

可以看到,我们依旧可以将数据查询出来,但是加了一个模糊查询的条件,这样就降低了查询的效率。
这种情况往往出现在 用户 没有输入 关键字就点击了搜索按钮,这样传到后端的就是一个 空字符串,这里需要注意,当第一次进入这个页面的时候 传到后端的 参数为null。如下图所示
还有一个要说的是,我们在 mybatis 维护sql的 配置文件中。 肯定会判断 <if test="name!=null"> 即 name这个变量是否为空。 但是如果这个对象 为 空字符串 就会大大影响我们查询的效率。
如下所示
可以看到,我们依旧可以将数据查询出来,但是加了一个模糊查询的条件,这样就降低了查询的效率。
这种情况往往出现在 用户 没有输入 关键字就点击了搜索按钮,这样传到后端的就是一个 空字符串,这里需要注意,当第一次进入这个页面的时候 传到后端的 参数为null。如下图所示

所以为了不影响 数据库的查询效率,我们需要 在 controller层 对 空字符串做一下处理。
如果 为空字符串 我们将其设置 为null

StringUtils 是一个 工具包,如果你也想使用 可以在maven中 添加 如下jar包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
mybatis中模糊查询的使用以及一些细节问题的注意事项的更多相关文章
- MyBatis中模糊查询
接口 // 模糊查询 List<User> getUserLike(String value); Mapper.xml文件 <!-- 模糊查询 --> <select i ...
- mybatis中模糊查询的方式
<!--Mapper.xml中如何进行模糊查询--> <sql id="brand_columns"> id, name, firstChar,brandN ...
- Mybatis中模糊查询的各种写法
1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} ...
- 【mybaits】Mybatis中模糊查询的各种写法
工作中用到,写三种用法吧,第四种为大小写匹配查询 1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{t ...
- Mybatis中模糊查询的各种写法(转)
. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');或者 <if test ...
- 在mybatis中模糊查询有三种写法
<select id="selectStudentsByName" resultType="Student"> <!--第一种--> ...
- MyBatis实现模糊查询的几种方式
在学习MyBatis过程中想实现模糊查询,可惜失败了.后来上百度上查了一下,算是解决了.记录一下MyBatis实现模糊查询的几种方式. 数据库表名为test_student,初始化了几条记录,如图: ...
- Mybatis的模糊查询以及自动映射
Mybatis的模糊查询 1. 参数中直接加入%% ? 1 2 3 4 5 6 7 8 9 param.setUsername("%CD%"); param.setP ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
随机推荐
- BMap:JavaScript API
ylbtech-Map-Baidu:JavaScript API JavaScript API百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构 ...
- 查看sql执行的情况
今天同事让看一个sql,无意中学到一个查看sql执行情况的命令,以前都是傻傻的等的,今后不用了 SELECT percent_complete FROM sys.dm_exec_requests
- C# 数组基础知识
数组的属性: 数组可以是一维.多维或交错的. 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null. 交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null. 数组的索引从零开 ...
- 混沌分形之马丁(Martin)迭代
我不记得从什么地方看到的这种分形图形生成方式,再到网上找竟然一时没查到任何相关资料.没关系,总之这种图形也很漂亮多变,并且其算法比较简单.只是我最后生成的图像有点瘆人,密集恐惧症患者慎入. 相关代码如 ...
- IOS 多线程 NSThread
一个正在运行的应用程序是一个进程,一个进程会默认开启一个主线程,但是在主线程中的操作是串行的,也就是当有多个任务同时需要完成的时候,是按照顺序一个个执行.因此,为了提高效率,会在进程中开启多个线程,每 ...
- 屌丝就爱尝鲜头——java8初体验
Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分 ...
- 【使用JSOUP实现网络爬虫】修改数据-设置属性的值
问题 在你解析一个Document之后可能想修改其中的某些属性值,然后再保存到磁盘或都输出到前台页面. 方法 可以使用属性设置方法 Element.attr(String key, String va ...
- oracle sqlplus登陆命令
1.语法: {<username>[/<password>][@<connect_identifier>] | / }[AS {SYSDBA | SYSOPER ...
- Axure-Axure RP For Chrome 演示扩展
Axure RP生成的Html原型,其中包含JS文件,在本地进行演示时浏览器IE会弹出安全提醒.谷歌浏览器Chrome则需要在线安装一个Axure的扩展工具才可以演示. Axure RP Extens ...
- PDO 增删改查封装的类
Selecting Data 你在mysql_*中是这样做的 <?php $result = mysql_query('SELECT * from table') or die(mysql_er ...