天天看點

BeanPropertyRowMapper ResultSet和實體類的字段進行實作自動映射

轉自: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方法進行映射滴。也就是說,我們需要使表中的字段名和實體類的成員變量名稱一緻。

版權聲明:本文為CSDN部落客「weixin_33690963」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33690963/article/details/92059564