转自:http://www.blogjava.net/cmzy/archive/2008/09/11/228271.html
org.springframework.jdbc.core.BeanPropertyRowMapper 可以将查询的ResultSet和实体类的字段进行实现自动映射
也就说,它可以把ResultSet和实体类的字段进行实现自动映射。
一个具体的例子如下:
假如有这样一个表,SQL-Server2000的建表脚本如下:
/*
管理员表
*/
CREATE TABLE admin(
id int identity(1,1) primary key,
username varchar(20) not null,
password varchar(32) not null,
)
为此,我们编写一个对应的实体类admin,它是一个标准的javaBean,代码如下:
/**
*
*/
package db.demo;
/**
* @author zhangyong
*
* @version 8:11:57 PM
*
*/
public class Admin {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
以前,在相应的AdminDAO中,我们以前是这么做滴,看起来很麻烦,如果一个表的字段很多的话,就要人命了,我们必须不停的set、get:
/**
*
*/
package db.demo;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
/**
* @author zhangyong
*
* @version 10:05:37 PM
*
*/
public class AdminDAO extends JdbcDaoSupport {
private final String ID = "id";
private final String USERNAME = "username";
private final String PASSWORD = "password";
private final String TABLE_NAME = "admin";
/**
* 查询记录总数<br/>
*/
public List<Admin> queryAll() {
final String sql = "Select * from " + TABLE_NAME;
return getJdbcTemplate().query(sql, new RowMapper(){
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Admin admin = new Admin();
admin.setId(rs.getInt(ID));
admin.setUsername(rs.getString(USERNAME));
admin.setPassword(rs.getString(PASSWORD));
return admin;
}
});
}
}
可见,我们必须的手工对ResultSet和Admin进行映射。而现在,我们只是需要这样:
/**
*
*/
package db.demo;
import java.util.List;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
/**
* @author zhangyong
*
* @version 10:05:37 PM
*
*/
public class AdminDAO extends JdbcDaoSupport {
private final String TABLE_NAME = "admin";
/**
* 查询记录总数<br/>
*/
public List<Admin> queryAll() {
final String sql = "Select * from " + TABLE_NAME;
return getJdbcTemplate().query(sql, new BeanPropertyRowMapper(Admin.class));
}
}
呵呵,只是一句话就完全搞定了……Sprin会为我们自动映射……显然这样比以前方便多了。我们还可以把它用在其它任何使用RowMapper的场合……毕竟它继承自RowMapper……
需要注意的是:BeanPropertyRowMapper是根据字段名和实体类中的标准Setter方法进行映射滴。也就是说,我们需要使表中的字段名和实体类的成员变量名称一致。