jdbctemplate之BeanPropertyRowMapper

今天看SpringAPI的时候无意中发现了Spring2.5新增了一个RowMapper的实现类org.springframework.jdbc.core.BeanPropertyRowMapper,但是貌似Spring的refrence里面根本就没提及到。Google了一下……貌似也莫得多少文档。

    Spring API Doc的说明如下:

   RowMapper implementation that converts a row into a new instance of the specified mapped target class. The mapped target class must be a top-level class and it must have a default or no-arg constructor.

   Column values are mapped based on matching the column name as obtained from result set metadata to public setters for the corresponding properties. The names are matched either directly or by transforming a name separating the parts with underscores to the same name using "camel" case.

   Mapping is provided for fields in the target class for many common types, e.g.: String, boolean, Boolean, byte, Byte, short, Short, int, Integer, long, Long, float, Float, double, Double, BigDecimal, java.util.Date, etc.

   To facilitate mapping between columns and fields that don't have matching names, try using column aliases in the SQL statement like "select fname as first_name from customer".

   Please note that this class is designed to provide convenience rather than high performance. For best performance consider using a custom RowMapper.


   也就说,它可以把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,代码如下:

代码   
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;


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;
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方法进行映射滴。也就是说,我们需要使表中的字段名和实体类的成员变量名称一致。

 

转载于:https://my.oschina.net/leoson/blog/103248

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值