天天看點

Spring MVC筆記 使用JdbcTemplate

spring提供了 jdbctemplate 來封裝資料庫jdbc操作細節, 

包括: 資料庫連接配接[打開/關閉] ,異常轉義 ,sql執行 ,查詢結果的轉換,

使用了spring jdbctemplate 之後,開發人員隻需要完成其中兩項編碼工作。

指定資料庫連接配接參數

打開資料庫連接配接

聲明sql語句

預編譯并執行sql語句

周遊查詢結果(如果需要的話)

處理每一次周遊操作

處理抛出的任何異常

處理事務

關閉資料庫連接配接

spring将替我們完成所有單調乏味的jdbc底層細節處理工作。

使用jdbctemplate進行查詢時,可以使用queryforxxx()等方法,例如使用queryforint()方法傳回user表格中的資料數目: jdbctemplate.quertforint("select count(*) from user"); 也可以使用queryforobject()傳回一個查詢後的對象,例如傳回一個string對象:

string name=(string)jdbctemplate.queryforobject(

             "selcet name from user where id=?",

                         new object[]{id},

                         java.lang.string.class);

)

上面兩個例子都是傳回單獨一筆資料,如果要傳回多筆資料,則可以使用queryforlist()方法,例如:

list rows=jdbctemplate().queryforlist("select * from user where id="+id.intvalue()); 傳回的list中包括的是map對象,每個map對象代表查詢結果中的一筆資料,每筆資料包括多個字段,要取得字段中的值,就要使用字段名作為key,例如:

   iterator it=rows.iterator();

   while(it.hasnext()){

       map result=(map)it.next();

       system.out.println(usermap.get("id"));

       system.out.println(usermap.get("name"));

       system.out.println(usermap.get("age"));

    }

在查詢的同時,你可以在傳回結果之前先進行一些處理,這就要實作rowcallbackhandler接口

public user find(integer id){

   final user user=new user();

   jdbctemplate.query("select * from user where id=?",new object[]{id},

                                         new rowcallbackhandler(){

                                                public void proccessrow(resultset rs){ 

                                                        user.setid(new integer(rs.getint("id")));

                                                        uset.setname(rs.getstring("name"));    

                                                 }

                                            });

   return user;

 }

如果一次要傳回多個查詢結果對象,則可以實作rowmapper接口

public class userrowmapper implements rowmapper{

       public object maprow(resultset rsmint rownum) throws sqlexception{

               user user=new user();

               user.setid(new integer(rs.getint("id")));

               user.setname(rs.getstring("name"));

               return user;

      } 

}

使用rowmapper查詢單筆資料

        user user=(user)jdbctemplate.queryforobject("select * from user where id=?",new object[]{id},

                                                                                    new userrowmapper());

         return user;

使用rowmapper查詢多筆資料

list users=jdbctemplate.query("select * from user",new userrowmapper());

傳回的users對象中,包括了從資料庫查詢出來的結果,并已經封裝成uer對象。