String.format VS. StrSubstitutor VS. NamedParameterJdbcTemplate

pengisgood發表於2013-11-25

  在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);
}

 

  

相關文章