jdbcTemplate使用方法总结

 

1、使用JdbcTemplate的execute()方法执行SQL语句 

[Java] 纯文本查看 复制代码
1
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");



2、如果是UPDATE或INSERT,可以用update()方法。 

[Java] 纯文本查看 复制代码
1
2
3
4
5
jdbcTemplate.update("INSERT INTO USER VALUES('"
   + user.getId() + "', '"
   + user.getName() + "', '"
   + user.getSex() + "', '"
   + user.getAge() + "')");



3、带参数的更新 

[Java] 纯文本查看 复制代码
1
2
3
jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id}); 
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});



4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法。查询单列或者列表。

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
Iterator it = rows.iterator();
while(it.hasNext()) {
    Map userMap = (Map) it.next();
    System.out.print(userMap.get("user_id") + "\t");
    System.out.print(userMap.get("name") + "\t");
    System.out.print(userMap.get("sex") + "\t");
    System.out.println(userMap.get("age") + "\t");
}


 

JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。
除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

 

JDBC的PreparedStatement
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
final String id = user.getId();
final String name = user.getName();
final String sex = user.getSex() + "";
final int age = user.getAge();
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
new PreparedStatementSetter() {
 public void setValues(PreparedStatement ps) throws SQLException {
    ps.setString(1, id);
    ps.setString(2, name);         
    ps.setString(3, sex);
    ps.setInt(4, age);
 }
});
final User user = new User();
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",
new Object[] {id},
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
    user.setId(rs.getString("user_id"));
    user.setName(rs.getString("name"));
    user.setSex(rs.getString("sex").charAt(0));
    user.setAge(rs.getInt("age"));
}
});
// 注意在Spring2.0前后是有区别的,后改为RowMapperResultSetExtractor
class UserRowMapper implements RowMapper {
    public Object mapRow(ResultSet rs, int index) throws SQLException {
        User user = new User();
  
        user.setId(rs.getString("user_id"));
        user.setName(rs.getString("name"));
        user.setSex(rs.getString("sex").charAt(0));
        user.setAge(rs.getInt("age"));
  
        return user;
    }
}
public List findAllByRowMapperResultReader() {
    String sql = "SELECT * FROM USER";
    return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
}

 

在getUser(id)里面使用UserRowMapper
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
public User getUser(final String id) throws DataAccessException {
    String sql = "SELECT * FROM USER WHERE user_id=?";
    final Object[] params = new Object[] { id };
    List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));
    return (User) list.get(0);
}

更多免费技术资料可关注:annalin1203

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章