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對象。