我们经常遇到类似的业务场景,如,判断某个用户userId
是否是会员。
「(反例):」 一些小伙伴会这样实现,先查从用户信息表查出用户记录,然后再去判断是否是会员:
<select id="selectUserByUserId" resultMap="BaseResultMap">
select user_id , vip_flag from user_info where user_id =#{userId};
</select>
boolean isVip(String userId){
UserInfo userInfo = userInfoDao.selectUserByUserId(userId);
return UserInfo != null && "Y".equals(userInfo.getVipFlag())
}
「(正例):」 针对这种业务场景,其实更好的实现,是直接select count
一下,或者select limit 1如下:
<select id="countVipUserByUserId" resultType="java.lang.Integer">
select count(1) from user_info where user_id =#{userId} and vip_flag ='Y';
</select>
boolean isVip (String userId){
int vipNum = userInfoDAp.countVipUserByUserId(userId);
return vipNum>0
}