Spring JdbcDaoSupport 执行SQL
return int: getJdbcTemplate().queryForInt(sql) select count(*)...
return List:getJdbcTemplate().query(sql, rowMapper) select ... from ...
return null:getJdbcTemplate().update(sql) insert into ... values or delete from ...
return null:getJdbcTemplate().update(sql, objects, types) insert into ... values
-----------------------------------------------------------------------------------
其中,update与execute的区别:
1、update可以带参数,而execute不可以。例如:
jdbcTemplate.update("update TableA set name = 'Andy’ where id=?", new Object[] {new Integer(3)});
jdbcTemplate.execute("update TableA set name = 'Andy’ where id=3");
2、update背后是借助于java.sql.PreparedStatement完成,而execute是基于java.sql.Statement。
3、update返回int, 即受影响的行数。execute返回void
4、execute不接受参数,无返回值,适用于create和drop table。
update可以接受参数,返回值为此次操作影响的记录数,适合于insert, update, 和delete等操作。
-----------------------------------------------------------------------------------
return List:getJdbcTemplate().query(sql, new Object[] { assetId }, new int[] { Types.INTEGER }, rowMapper) select * from ... where id=
Object[] objects = new Object[]{user.getId(),user.getName(),user.getPassword()...};
int[] types = new int[]{Type.VARCHAR,Type.VARCHAR,Type.VARCHAR,...}
RowMapper对象
RowMapper的 mapRow() 方法是留给我们去组装实体类用的,返回是这种类的集合List
Public List<User> getUsers() {
String sql = "select * from User";
return getJdbcTemplate().query(sql,new ItemRowMapper());
}
protected class ItemRowMapper implements RowMapper { //这个类也可以定义在方法里如 RowMapper rowMapper = new RowMapper(){}
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Item item = new Item();
item.setId(rs.getInt("id"));
item.setUserId(rs.getInt("user_id"));
item.setName(rs.getString("name"));
item.setEmail(rs.getString("email"));
return item;
}
}
想象 getJdbcTemplate().query()方法 和 RowMapper类
public List query(String sql, RowMapper rowMapper){
int num = 0;
List<Object> list = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
conn = getConn();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
num = 0;
while(rs.next()){num++};
list = rowMapper.execute(rs, num);
}catch(Exception e){
}finall{
rs.close();
pstmt.close();
conn.close();
}
return list;
}
abstract Class RowMapper(){
List<Object> list = null;
public List execute(ResultSet rs, int rowNum){ //rowNum没用到
while(rs.next){
list.add(mapRow(rs, rowNum));
}
return list;
}
public Object mapRow(ResultSet rs, int RowNum);
}
getJdbcTemplate().query的使用
最新推荐文章于 2021-10-23 17:29:27 发布