天天看點

Spring JdbcTemplate學習筆記(二) —— jdbcTemplate常用方法查詢更新

查詢

queryForObject

//關于 jdbcTemplate的queryForObject方法。下面我們就一一解析一下:

spring 3.2.2 版本之後jdbcTemplate.queryForInt()和jdbcTemplate.queryForLong() 就取消了,全部用queryForObject代替了,這裡就不詳解了。

queryForObject(sql, requiredType)

本質上和queryForInt相同,隻是可以傳回不同的對象,例如傳回一個String對象

2個參數,1、sql 2、傳回來的對象class

String sql = "select count(*) from user";
Integer num = jdbcTemplate.queryForObject(sql, Integer.class); 
           

這裡不能直接映射為一個實體類,如

運作時會報錯。

如果想映射為具體的實體,可以使用ORM架構,或者後面介紹的方法。

queryForObject(sql, requiredType, args…)

第三個參數是個可變參數

String sql = "select count(*) from user where ID<? AND ID>?";
jdbcTemplate.queryForObject(sql, Integer.class,4,2 );
           

queryForObject(sql, args[], requiredType)

第二個參數是個參數數組

jdbcTemplate.queryForObject(sql,new Integer[]{5,1}, Integer.class)
           

也可以使用不同類型的參數

String sql = "select count(*) from user where ID>? AND USER_NAME LIKE ?";

jdbcTemplate.queryForObject(sql, new Object[]{1,"%哈%"},Integer.class);
           

queryForObject(sql, rowMapper)

注意,這裡查詢必須保證隻能查詢一條資料,否則會報錯。

String sql = "select * from user WHERE ID = 1";
User user = jdbcTemplate.queryForObject(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
    User user = new User();
    user.setId(rs.getInt("ID"));
    user.setUserName(rs.getString("USER_NAME"));
    return user;
}
});
           

或者使用RowMapper的實作類:BeanPropertyRowMapper

String sql = "select * from user WHERE ID = ";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.Class));
           

傳參也是跟上面相同,兩種方法。

queryForList

傳回一個裝有map的list,每一個map是一條記錄,map裡面的key是字段名

List<Map<String, Object>> rows = jdbcTemplate.queryForList("SELECT * FROM user");  
           

//得到裝有map的list

for(int i=;i<rows.size();i++){     //周遊    
Map userMap=rows.get(i);    
System.out.println(userMap.get("id"));      
System.out.println(userMap.get("name"));      
System.out.println(userMap.get("age"));    
}   
           

傳參同上。

queryForMap

//這個查詢隻能是查詢一條記錄的查詢,傳回一個map,key的值是column的值    
Map<String, Object> map = jdbcTemplate.queryForMap("select * from user");    
map.get("name ");
           

queryForRowSet

//傳回一個結果集然後調用.getString或者getInt等去取值

query方法就不詳解了,不常用,有queryForXXX方法基本夠用。

更新

execute

執行sql語句,無傳回執,用于更新操作(增、删、改)

jdbcTemplate.execute(sql);

update

更新操作,傳回受影響的行數

Int rowNum = jdbcTemplate.update(sql);

batchUpdate

執行批量更新,參數為string數組

String[] sql = new String[2];

sql[0] = “”;

sql[1] = “”;

jdbcTemplate.batchUpdate(sql);

//更新,args為對象數組

jdbcTemplate.update(sql, args[]);