推荐关注
以下文章来源Java后端栈,回复”面试“获面试宝典
哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你手里,大家记得将后端君的公众号 加星标置顶 ,在此真诚的表示感谢~
来源:网络
上一篇:Java8 判空新写法!
正文
大家好,我是栈哥。
where 1=1
<select id="queryBookInfo" parameterType="com.ths.platform.entity.BookInfo" resultType="java.lang.Integer">
select count(id) from t_book t where 1=1
<if test="title !=null and title !='' ">
AND title = #{title}
</if>
<if test="author !=null and author !='' ">
AND author = #{author}
</select>
上面的代码很熟悉,就是查询符合条件的总条数。在mybatis中常用到if标签判断where子句后的条件,为防止首字段为空导致sql报错。没错 ,当遇到多个查询条件,使用where 1=1 可以很方便的解决我们条件为空的问题,那么这么写 有什么问题吗 ?关注Java后端栈
网上有很多人说,这样会引发性能问题,可能会让索引失效,那么我们今天来实测一下,会不会不走索引?
实 测
title字段 已经加上索引,我们通过EXPLAIN看下
EXPLAIN SELECT * FROM t_book WHERE title = '且在人间';
EXPLAIN SELECT * FROM t_book WHERE 1=1 AND title = '且在人间';
对比上面两种我们会发现 可以看到 possible_keys(可能使用的索引) 和 key(实际使用的索引)都使用到了索引进行检索。另外,搜索公众号程序员小乐后台回复“赚钱”,获取一份惊喜礼包。
结 论
那么我们在mybatis当中可以改变一下写法,因为毕竟mysql优化器也是需要时间的,虽然是走了索引,但是当数据量很大时,还是会有影响的,所以我们建议代码这样写:
select count(*) from t_book t
<where>
title = #{title}
</where>
最后给读者整理了一份BAT大厂面试真题,需要的可扫码加微信备注:“面试”获取。
◆ ◆ ◆ ◆ ◆
字节跳动面试经验总结,已顺利拿到offer!
一款神仙接私活低代码平台,吊到不行(附源码)
IntelliJ IDEA这样配置,代码效率嗖嗖的~
Intellij IDEA 2021.2.3 最新版免费激活教程(可激活至 2099 年,亲测有效)
分享一个牛逼的 Java 开源后台管理系统,不要造轮子了!
硬核!一套基于SpringBoot + Vue 的开源物联网智能家居系统(附源码)!
基于 SpringBoot2 + MybatisPlus 的商城管理系统(附源码)
重磅推荐:一套开源的网校系统,无论是自建网校还是接副业都很方便
Git 常用命令,每条都很重要!
不是我吹,这款 IDEA 插件你真没用过!
事关个人收款码!微信、支付宝深夜回应
字节跳动28岁员工猝死,妻子怀孕两个月,惨!
14 个写 Java 的习惯
欢迎添加栈哥个人微信 ysle007 进粉丝群或围观朋友圈
扫码关注带你吊爆Java后端技术
文章有问题?点此查看未经处理的缓存