竹笋

首页 » 问答 » 问答 » 工作10年,分享50个让你代码更好的小建
TUhjnbcbe - 2023/8/13 21:57:00

前言

工作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("欢迎

1
查看完整版本: 工作10年,分享50个让你代码更好的小建