String.format VS. StrSubstitutor VS. NamedParameterJdbcTemplate

  在Java中,想要用一个字符串模块根据参数的不同来产生不同的字符串,主要有以下两种办法:

  Java String.format()


 

     在JDK1.5中,String类新增了一个很有用的静态方法String.format().
     format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串;
     format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。
     在格式化字符串中,大部分参数都比较符合C风格中的printf()函数,但是需要注意的是,在Java中,有一个可选的argument_index的十进制的参数,用来表明参数在参数列表中的位置。第一个由“1$”引用,第二个由“2$”引用,以此类推。例如:

System.out.println(String.format("%s,%s,%1$s,%2$s,%1$s", "a", "b"));   

//输出:a,b,a,b,a

 

  Commons-lang StrSubstitutor


 

     在Commons-lang中,给我们提供一个新的类叫做StrSubstitutor,专门用来做一些字符串替换填充的事情。例如:

Map valuesMap = HashMap();
valuesMap.put("animal", "quick brown fox");
valuesMap.put("target", "lazy dog");
String templateString = "The ${animal} jumped over the ${target}.";
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);

//输出:The quick brown fox jumped over the lazy dog.

 

  联想到的NamedParameterJdbcTemplate


  这使我想起了曾经在使用JdbcTemplate的时候,SQL语句的参数都是用“?”作为占位符,严重依赖于顺序。为了解决这个问题,我们可以选择使用Spring中的NamedParameterJdbcTemplate。这样我们就可以使用“:”跟上变量名而不用依赖位置的先后顺序了,而且可读性也大大提高了。例如:

//insert with named parameter
public void insertNamedParameter(Customer customer){
    String sql ="INSERT INTO CUSTOMER (CUST_ID, NAME, AGE) VALUES (:custId, :name, :age)";
    Map<String, Object]]> parameters =new HashMap<String, Object]]>();
    parameters.put("custId", customer.getCustId());
    parameters.put("name", customer.getName());
    parameters.put("age", customer.getAge());
    getSimpleJdbcTemplate().update(sql, parameters);
}

 

  

posted @ 2013-11-25 19:02  pengisgood  阅读(2385)  评论(0编辑  收藏  举报