当前位置:网站首页>The new colleague asked me what "where 1=1" means???

The new colleague asked me what "where 1=1" means???

2022-06-12 19:51:00 Java collection

When the new colleague came, he asked me where 1=1 What's interesting , It doesn't make sense , I smiled. . Today, let's explain .

where 1=1

Let's start with a piece of code

<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}
    </if> 
</select>

The above code is familiar , This is the total number of qualified queries . stay mybatis Used in if Tag judgment where Condition after clause , In order to prevent the first field from being empty, resulting in sql Report errors . you 're right , When multiple query conditions are encountered , Use where 1=1 It can easily solve the problem that our condition is empty , So that's how it's written Is there anything wrong with that? ?

Many people on the Internet say , This can cause performance problems , May invalidate the index , So let's measure it today , Will you not go . in addition , More similar interview questions , official account Java selected , reply java interview , Access to interview information , Support online question brushing anytime, anywhere .

Actually measured

title The field has been indexed , We go through EXPLAIN look down :

EXPLAIN SELECT * FROM t_book WHERE title = ' And on earth ';
EXPLAIN SELECT * FROM t_book WHERE 1=1 AND title = ' And on earth ';

Comparing the above two, we will find You can see possible_keys( Possible indexes ) and key( Actual index used ) All use the index for Retrieval .

Conclusion

where 1=1 I'll go with the index , Does not affect query efficiency , We wrote sql Orders will be mysql Analyze and optimize into your own processing instructions , In the process 1 = 1 Such meaningless conditions will be optimized . Use explain EXTENDED sql Proofread , Find out where1=1 Such conditions will be mysql Optimized by the optimizer .

Recommend your own Spring boot The actual project of :

https://gitee.com/yoodb/jing-xua‍n

So we're in mybatis You can change the writing , Because after all mysql The optimizer also takes time , Although it's gone , But when the amount of data is large , It will still have an impact , So we suggest that the code be written like this :

<select id="queryBookInfo" parameterType="com.ths.platform.entity.BookInfo" resultType="java.lang.Integer">
select count(*) from t_book t
<where>
     <if test="title !=null and title !='' ">
         title = #{title}
     </if>
     <if test="author !=null and author !='' "> 
         AND author = #{author}
     </if>
</where> 
</select>

We use it where Label substitution .

author : Su Shi _

https://juejin.cn/post/7030076565673213989

official account “Java selected ” The published content indicates the source of , All rights reserved ( Those whose copyright cannot be verified or whose source is not indicated all come from the Internet , Reprinted , The purpose of reprinting is to convey more information , The copyright belongs to the original author . If there is any infringement , Please contact the , The author will delete the first time !

Many people have asked recently , Is there any readers Communication group ! The way to join is simple , official account Java selected , reply “ Add group ”, You can join the group !

Java Interview questions ( Wechat applet ):3000+ The road test questions , contain Java Basics 、 Concurrent 、JVM、 Threads 、MQ series 、Redis、Spring series 、Elasticsearch、Docker、K8s、Flink、Spark、 Architecture design, etc , Brush questions online at any time !

------ Special recommendation ------

Special recommendation : Focus on the most cutting-edge information and technology sharing , Official account for preparing for overtaking on curves and various open source projects and efficient software ,「 Big coffee notes 」, Focus on finding good things , It's worth your attention . Click the official account card below to follow .

If the article helps , Click to see , Forward! !

原网站

版权声明
本文为[Java collection]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/163/202206121947391564.html