16 条 yyds 的代码规范

16 条 yyds 的代码规范
如何更规范化编写Java 代码
 
Many of the happiest people are those who own the least. But are we really so happy with our IPhones, our big houses, our fancy cars?
 
忘川如斯,拥有一切的人才更怕失去。
 
链接 | cnblogs.com/taojietaoge/p/11575376.html
 
背景:如何更规范化编写Java 代码的重要性想必毋需多言,其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。
 
一、MyBatis 不要为了多个查询条件而写 1 = 1
 
【此有争议,博主查阅了部分资料,大家对于此的多数验证是未受影响,大家在开发中各取所需,仅持指导性意见】
 
当遇到多个查询条件,使用where 1=1 可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,因为添加了 “where 1=1 ”的过滤条件之后,数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(即全表扫描) 以比较此行是否满足过滤条件,当表中的数据量较大时查询速度会非常慢;此外,还会存在SQL 注入的风险。
 
反例:
 
<select id="queryBookInfo" parameterType="com.tjt.platform.entity.BookInfo" resultType="java.lang.Integer">
 
 select count(*) from t_rule_BookInfo 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>
 
正例:
 
<select id="queryBookInfo" parameterType="com.tjt.platform.entity.BookInfo" resultType="java.lang.Integer">
 
     select count(*) from t_rule_BookInfo t
 
        <where>
 
            <if test="title !=null and title !='' ">
 
                 title = #{title} 
 
            </if>
 
            <if test="author !=null and author !='' "> 
 
             AND author = #{author}
 
            </if>
 
        </where> 
 
</select>
 
UPDATE 操作也一样,可以用<set> 标记代替 1=1。
 
二、 迭代entrySet() 获取Map 的key 和value
 
当循环中只需要获取Map 的主键key时,迭代keySet() 是正确的;但是,当需要主键key 和取值value 时,迭代entrySet() 才是更高效的做法,其比先迭代keySet() 后再去通过get 取值性能更佳。
 
反例:
 
//Map 获取value 反例:
 
HashMap<String, String> map = new HashMap<>();
 
for (String key : map.keySet()){
 
String value = map.get(key);
 
}
 
正例:
 
  //Map 获取key & value 正例:
 
HashMap<String, String> map = new HashMap<>();
 
 for (Map.Entry<String,String> entry : map.entrySet()){
 
     String key = entry.getKey();
 
     String value = entry.getValue();
 
}
 
议,转载请附上原文出处链接及本声明。
 
原文链接:https://blog.csdn.net/qq_41570658/article/details/119146661

推荐阅读