當(dāng)柳上原的風(fēng)吹向天際的時候...

          真正的快樂來源于創(chuàng)造

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

          幾個使用JDBC Template常用的工具類

          第一:IntegerRowMapper

          代碼:

          public class IntegerRowMapper implements RowMapper {

                public Object mapRow(ResultSet rs, int index) throws SQLException {

                      Integer c = new Integer(0);

                      c = rs.getInt(1);

                      return c;

                }

          }

          用途:

          SQL只是取數(shù)量時,可以采用這個類減少一些代碼,示例如下:

          StringBuilder sb=new StringBuilder();

          sb.append("    SELECT");

          sb.append("        count(*)");

          sb.append("    FROM");

          sb.append("        tb_contract");

          sb.append("    WHERE");

          sb.append("        contract_id='"+id+"' ");

          String sql=sb.toString();

           

          List<?> ls = this.getJdbcTemplate().query(sql, (new IntegerRowMapper()));

          Integer i = (Integer) ls.get(0);

           

          第二:StringRowMapper

          代碼:

          public class StringRowMapper implements RowMapper {

                public Object mapRow(ResultSet rs, int index) throws SQLException {

                      String c=new String(rs.getString(1));

                  return c;

                }

          }

          用途:當(dāng)SQL語句只返回一個字符串類型的定值時,采用這個類能減少部分代碼,示例如下:

          StringBuilder sb=new StringBuilder();

          sb.append("    select");

          sb.append("         user_name as name");

          sb.append("    from");

          sb.append("        TB_SYS_USER");

          sb.append("    where");

          sb.append("         user_id='"+userId+"'");

          String sql=sb.toString();

           

          List<?> ls = this.getJdbcTemplate().query(sql, (new StringRowMapper()));

          String usrName=(String)ls.get(0);

           

          第三:RecordCounter

          代碼:

          public class RecordCounter{

                private String sql;

               

                private JdbcTemplate jdbcTemplate;

               

                /**

                 * 構(gòu)造函數(shù)

                 * @param sql

                 * @param jdbcTemplate

                 */

                public RecordCounter(String sql,JdbcTemplate jdbcTemplate){

                      this.sql=sql;

                      this.jdbcTemplate=jdbcTemplate;

                }

               

                /**

                 * 得到SQL語句查詢到的記錄數(shù),對外的關(guān)鍵語句

                 * @author: 何楊(heyanghy@cn.ibm.com

                 * @date : Apr 23, 2011

                 * @time : 11:09:35 AM

                 * @return

                 */

                public int getCount() throws Exception{

                      StringBuilder sb=new StringBuilder();

                      sb.append("    select ");

                      sb.append("        count(*) as recordCount ");

                      sb.append("    from ("+sql+") t ");

                      String sql=sb.toString();

                     

                      class MyRowMapper implements RowMapper {

                            public Object mapRow(ResultSet rs, int index) throws SQLException {

                                  Integer c = new Integer(0);

           

                                  c=rs.getInt("recordCount");

           

                                  return c;

                            }

                      }

           

                      List<?> ls = jdbcTemplate.query(sql, (new MyRowMapper()));

                      Integer i=(Integer)ls.get(0);

                     

                      return i.intValue();

                }

          }

          用途:分頁時常需要得到SQL語句查詢得到的總記錄數(shù),采用這個類可以減少部分代碼。

          示例:略

           

          第四:MapRowMapper

          代碼:

          public class MapRowMapper implements RowMapper {

                public Object mapRow(ResultSet rs, int index) throws SQLException {

                      List<Map<String,String>> ls=new ArrayList<Map<String,String>>();

                 

                  int n=rs.getMetaData().getColumnCount();

                 

                  for(int i=1;i<=n;i++){

                      try{

                            Map<String,String> map=new HashMap<String,String>();

                            map.put(rs.getMetaData().getColumnName(i).toLowerCase(), rs.getString(i));

                           

                            ls.add(map);

                      }

                      catch(Exception ex){

                            continue;

                      }

                  }

                 

                  return ls;

                }

          }

          用途:一般來說,當(dāng)查詢只會返回一條記錄時,如按ID得到一條記錄,會使用這個Mapping器。得到的對象可以用來給對象賦值。示例如下:

          StringBuilder sb=new StringBuilder();

          sb.append("    select");

          sb.append("        *");

          sb.append("    from");

          sb.append("        TB_CONTRACT ");

          sb.append("    where");

          sb.append("        contract_id='"+id+"'");

          String sql=sb.toString();

           

          List<?> ls = this.getJdbcTemplate().query(sql, (new MapRowMapper()));

           

          Map<String,String> map = new HashMap<String,String>();

           

          List<?> ls2=(List<?>)ls.get(0);

           

          for(Object obj:ls2){

                Map<String,String> mapTemp=(Map<String,String>)obj;

               

                map.putAll(mapTemp);

          }

          第五:NameValueRowMapper

          代碼:

          public class NameValueRowMapper implements RowMapper {

                public Object mapRow(ResultSet rs, int index) throws SQLException {

                      List<NameValue> ls=new ArrayList<NameValue>();

                 

                  int n=rs.getMetaData().getColumnCount();

                 

                  for(int i=1;i<=n;i++){

                      NameValue nv=new NameValue(rs.getMetaData().getColumnName(i).toLowerCase(),rs.getString(i));

                      ls.add(nv);

                  }

                 

                  return ls;

                }

          }

           

          public class NameValue extends BaseDomainObj{

                private String name;

                private String value;

               

                /**

                 * 無參數(shù)構(gòu)造函數(shù)

                 */

                public NameValue(){

                     

                }

               

                /**

                 * 雙參數(shù)構(gòu)造函數(shù)

                 * @param name

                 * @param value

                 */

                public NameValue(String name,String value){

                      this.name=name;

                      this.value=value;

                }

               

                public String getName() {

                      return name;

                }

                public void setName(String name) {

                      this.name = name;

                }

                public String getValue() {

                      return value;

                }

                public void setValue(String value) {

                      this.value = value;

                }

               

                public String asXML() {

                      StringBuilder sb=new StringBuilder();

                     

                      sb.append("<"+name+">");

                      sb.append(StringUtils.isBlank(value)?"-":value);

                      sb.append("</"+name+">");

                     

                      return sb.toString();

                }

          }

           

          public class NameValueList extends BaseDomainObj{

                // 內(nèi)含NameValue的鏈表

                private List<?> list;

               

                /**

                 * 無參數(shù)構(gòu)造函數(shù)

                 */

                public NameValueList(){

                     

                }

               

                /**

                 * 帶參數(shù)構(gòu)造函數(shù)

                 * @param list

                 */

                public NameValueList(List<?> list){

                      this.list=list;

                }

               

                @SuppressWarnings("unchecked")

                public String asXML() {

                      StringBuilder sb=new StringBuilder();

                     

                     

                      for(Object obj:list){

                            List<NameValue> ls=(List<NameValue>)obj;

                           

                            sb.append("<node>");

                            for(NameValue nv:ls){

                                  sb.append(nv.asXML());

                            }

                            sb.append("</node>");

                      }

                     

                     

                      return sb.toString();

                }

           

                public void setList(List<?> list) {

                      this.list = list;

                }

           

                public List<?> getList() {

                      return list;

                }

          }

          說明:將一行記錄轉(zhuǎn)化成一個包含鍵值對的鏈表,在NameValueList的幫助下能方便的把從數(shù)據(jù)庫得到的行集轉(zhuǎn)化為一段XML

          StringBuilder sb=new StringBuilder();

          sb.append("    SELECT ");

          sb.append("        *");

          sb.append("    FROM tb_contract ");

          sb.append("    WHERE contract_id='"+id+"'");

          String sql=sb.toString();

           

          List<?> ls=this.getJdbcTemplate().query(sql,new NameValueRowMapper());

           

          NameValueList list=new NameValueList(ls);

           

          String xml=list.asXML();

           

           

           

           

           

          posted on 2011-06-01 18:17 何楊 閱讀(547) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 青冈县| 静安区| 祁阳县| 宁国市| 循化| 正安县| 广汉市| 滦南县| 德江县| 奉新县| 尚义县| 浦北县| 卓尼县| 西安市| 玉山县| 休宁县| 淮北市| 东丰县| 盐源县| 得荣县| 汝州市| 政和县| 吉木乃县| 婺源县| 右玉县| 兴和县| 阿克陶县| 屯昌县| 无极县| 定南县| 乐昌市| 肇东市| 博白县| 商南县| 扶余县| 靖江市| 河池市| 恩平市| 泾源县| 商南县| 玉林市|