注意Java陷阱-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

注意Java陷阱

简介: 一 deleteCharAt StringBuilder方法deleteCharAt:在这个序列中的删除指定位置字符,只是一个字符.如下代码,在拼接SQL过程中,删除最后一个”?”或者”,”都是可以的,但是删除最后一个”and”时,只是删除了最后一个”and”的一个字符,即”a” 的位置. 结果变成: select * form tableName where 1

一 deleteCharAt
StringBuilder方法deleteCharAt:在这个序列中的删除指定位置字符,只是一个字符.如下代码,在拼接SQL过程中,删除最后一个”?”或者”,”都是可以的,但是删除最后一个”and”时,只是删除了最后一个”and”的一个字符,即”a” 的位置. 结果变成: select * form tableName where 1=1 nd

可以使用 setLength 替代:stringBuilder.setLength(stringBuilder.length()-“and “.length());

public static String buildSelectSql(final String tableName,final String[] columns
            ,final String orderByCondition,final String[] wheres)
    {
        if (CheckValue.valideteNullOrEmpty(tableName)) {
            return "";
        }
        StringBuilder stringBuilder=new StringBuilder(" select ");

        if (columns==null||columns.length==0) {
            stringBuilder.append(" *");
        }
        else {

            for(String column : columns) 
                stringBuilder.append(column+",");

            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
        }

        stringBuilder.append(" from "+tableName);

        if (wheres!=null&&wheres.length>0) {
            stringBuilder.append(" where ");

            for (String where : wheres) 
                stringBuilder.append(where+"=? and ");

            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("and"));
        }

        if (orderByCondition!=null&&!orderByCondition.isEmpty()) {
            stringBuilder.append(" order by "+orderByCondition);
        }

        return stringBuilder.toString();

    }

二 使用spring注入对象,当出现null对象时,考虑定义上层对象时是否采用spring方式注入.
如下 代码片段:

public class PayService19 implements IPayService {
    //方式一 spring注入
    @Resource(name="constructPayParams")
    private ConstructPayParams constructPayParam;

    //方式二 正常创建
    private ConstructPayParams constructPayParam=new ConstructPayParams()


    //省略其他方法
}

代码片段2 ConstructPayParams

@Component
public class ConstructPayParams {

    @Resource(name = "pay19BasicProfile")
    private Pay19BasicProfile payBasicProfile;

    //省略其他方法
}

如果代码片段1中采用方式二,正常创建ConstructPayParams对象时,则ConstructPayParams类中的payBasicProfile无法被注入,为null,必须采用方式一spring注入方式创建ConstructPayParams对象

三 格式化保留两位小数

//如果为整型,则异常
String.format("%.2f", orderProfile.getAmount()/100.0)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章