前言
工作10年,看过很多思考不够深入的代码,因此写一下总结吧,50个让你代码更好的小建议。其中的一些点,我以前的文章也写过啦,这次主要汇总一下。希望大家日常写代码多点思考,多点总结,加油!同时哪里有不对的,也望指出,感谢哈~
1.仅仅判断是否存在时,selectcount比select具体的列,更好。我们经常遇到类似的业务场景,如,判断某个用户userId是否是会员。
「(反例):」一些小伙伴会这样实现,先查从用户信息表查出用户记录,然后再去判断是否是会员:
selectid="selectUserByUserId"resultMap="BaseResultMap"selctuser_id,vip_flagfromuser_infowhereuser_id=#{userId};/selectbooleanisVip(StringuserId){UserInfouserInfo=userInfoDAp.selectUserByUserId(userId);returnUserInfo!=null"Y".equals(userInfo.getVipFlag())}
「(正例):」针对这种业务场景,其实更好的实现,是直接selectcount一下,或者selectlimit1如下:
selectid="countVipUserByUserId"resultType="java.lang.Integer"selctcount(1)fromuser_infowhereuser_id=#{userId}andvip_flag=Y;/selectbooleanisVip(StringuserId){intvipNum=userInfoDAp.countVipUserByUserId(userId);returnvipNum0}2.复杂的if逻辑条件,可以调整顺序,让程序更高效
假设业务需求是这样:如果用户是会员,并且第一次登陆时,需要发一条通知的短信。假如没有经过思考,代码很可能直接这样写了。
if(isUserVipisFirstLogin){sendMsgNotify();}
假设总共有5个请求进来,isUserVip通过的有3个请求,isFirstLogin通过的有1个请求。那么以上代码,isUserVip执行的次数为5次,isFirstLogin执行的次数也是3次,如下:
如果调整一下isUserVip和isFirstLogin的顺序呢?
if(isFirstLoginisUserVip){sendMsg();}
isFirstLogin执行的次数是5次,isUserVip执行的次数是1次,如下:
如果你的isFirstLogin,判断逻辑只是selectcount一下数据库表,isUserVip也是selectcount一下数据库表的话,显然,把isFirstLogin放在前面更高效。
3.写查询Sql的时候,只查你需要用到的字段,还有通用的字段,拒绝反手的select*「反例:」
select*fromuser_infowhereuser_id=#{userId};
「正例:」
selectuser_id,vip_flagfromuser_infowhereuser_id=#{userId};
「理由:」
节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率。4.优化你的程序,拒绝创建不必要的对象如果你的变量,后面的逻辑判断,一定会被赋值;或者说,只是一个字符串变量,直接初始化字符串常量就可以了,没有必要愣是要newString().
反例:
Strings=newString("欢迎