`
pokerwen
  • 浏览: 62758 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

发现了Spring2.5里的一个新东西, BeanPropertyRowMapper类。

阅读更多

(残梦追月原创,转载请注明)

本文地址:http://www.blogjava.net/cmzy/archive/2008/09/11/228271.html  

   今天看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的建表脚本如下:

 

代码    查看源代码 打印
  1. /*  
  2. 管理员表  
  3. */  
  4. CREATE   TABLE  admin(  
  5.    id int  identity(1,1)  primary   key ,  
  6.    username varchar (20)  not   null ,  
  7.    password   varchar (32)  not   null ,     
  8. )  

   为此,我们编写一个对应的实体类admin,它是一个标准的javaBean,代码如下:

 

代码    查看源代码 打印
  1. /**  
  2.  *   
  3.  */   
  4. package  db.demo;  
  5.   
  6.   
  7. /**  
  8.  * @author zhangyong  
  9.  *   
  10.  * @version 8:11:57 PM  
  11.  *   
  12.  */   
  13. public   class  Admin {  
  14.         private   int  id;  
  15.         private  String username;  
  16.         private  String password;  
  17.   
  18.         public   int  getId() {  
  19.                 return  id;  
  20.         }  
  21.   
  22.         public   void  setId( int  id) {  
  23.                 this .id = id;  
  24.         }  
  25.   
  26.         public  String getUsername() {  
  27.                 return  username;  
  28.         }  
  29.   
  30.         public   void  setUsername(String username) {  
  31.                 this .username = username;  
  32.         }  
  33.   
  34.         public  String getPassword() {  
  35.                 return  password;  
  36.         }  
  37.   
  38.         public   void  setPassword(String password) {  
  39.                 this .password = password;  
  40.         }  
  41. }  

   以前,在相应的AdminDAO中,我们以前是这么做滴,看起来很麻烦,如果一个表的字段很多的话,就要人命了,我们必须不停的set、get:

 

代码    查看源代码 打印
  1. /**  
  2.  *   
  3.  */   
  4. package  db.demo;  
  5.   
  6. import  java.sql.ResultSet;  
  7. import  java.sql.SQLException;  
  8. import  java.util.List;  
  9.   
  10. import  org.springframework.jdbc.core.RowMapper;  
  11. import  org.springframework.jdbc.core.support.JdbcDaoSupport;  
  12.   
  13. /**  
  14.  * @author zhangyong  
  15.  *   
  16.  * @version 10:05:37 PM  
  17.  *   
  18.  */   
  19. public   class  AdminDAO  extends  JdbcDaoSupport {  
  20.   
  21.         private   final  String ID =  "id" ;  
  22.         private   final  String USERNAME =  "username" ;  
  23.         private   final  String PASSWORD =  "password" ;  
  24.         private   final  String TABLE_NAME =  "admin" ;  
  25.   
  26.         /**  
  27.          * 查询记录总数<br/>  
  28.          */   
  29.         public  List<Admin> queryAll() {  
  30.                 final  String sql =  "Select * from "  + TABLE_NAME;  
  31.                   
  32.                 return  getJdbcTemplate().query(sql,  new  RowMapper(){  
  33.   
  34.                         public  Object mapRow(ResultSet rs,  int  rowNum)  throws  SQLException {  
  35.                                 Admin admin = new  Admin();  
  36.                                 admin.setId(rs.getInt(ID));  
  37.                                 admin.setUsername(rs.getString(USERNAME));  
  38.                                 admin.setPassword(rs.getString(PASSWORD));  
  39.                                 return  admin;  
  40.                         }  
  41.                           
  42.                 });  
  43.         }  
  44. }  

   可见,我们必须的手工对ResultSet和Admin进行映射。而现在,我们只是需要这样:

 

代码    查看源代码 打印
  1. /**  
  2.  *   
  3.  */   
  4. package  db.demo;  
  5.   
  6. import  java.util.List;  
  7.   
  8. import  org.springframework.jdbc.core.BeanPropertyRowMapper;  
  9. import  org.springframework.jdbc.core.support.JdbcDaoSupport;  
  10.   
  11. /**  
  12.  * @author zhangyong  
  13.  *   
  14.  * @version 10:05:37 PM  
  15.  *   
  16.  */   
  17. public   class  AdminDAO  extends  JdbcDaoSupport {  
  18.   
  19.         private   final  String TABLE_NAME =  "admin" ;  
  20.   
  21.         /**  
  22.          * 查询记录总数<br/>  
  23.          */   
  24.         public  List<Admin> queryAll() {  
  25.                 final  String sql =  "Select * from "  + TABLE_NAME;  
  26.                   
  27.                 return  getJdbcTemplate().query(sql,  new  BeanPropertyRowMapper(Admin. class ));  
  28.         }  
  29. }  

    呵呵,只是一句话就完全搞定了……Sprin会为我们自动映射……显然这样比以前方便多了。我们还可以把它用在其它任何使用RowMapper的场合……毕竟它继承自RowMapper……

    需要注意的是:BeanPropertyRowMapper是根据字段名和实体类中的标准Setter方法进行映射滴。也就是说,我们需要使表中的字段名和实体类的成员变量名称一致。

分享到:
评论

相关推荐

    精通Spring2.5pdf书籍proSpring2.5

    《精通Spring2.5》是一本深度探讨Spring框架的权威指南,主要针对Spring 2.5版本进行深入解析。Spring是Java企业级应用开发中最受欢迎的框架之一,它以其轻量级、模块化的设计,以及对IoC(Inversion of Control,...

    Spring2.5-中文参考手册chm

    Spring2.5版本是该框架的一个重要里程碑,它在2008年发布,带来了许多新特性和改进,提升了开发者在构建应用程序时的灵活性和效率。 **依赖注入(DI)和控制反转(IoC)** Spring的核心特性之一是依赖注入(Dependency...

    spring2.5中文文档

    Spring 2.5版本是该框架的一个重要里程碑,引入了许多新特性并优化了已有的功能。以下是对Spring 2.5中文文档的主要内容进行的详细解释。 1. **依赖注入(DI)增强**:在Spring 2.5中,依赖注入进一步加强,支持了...

    Spring2.5 源代码

    Spring 2.5是Spring框架的一个重要版本,它引入了许多关键特性,为开发者提供了更强大的功能和更好的灵活性。让我们深入探讨一下Spring 2.5中的核心知识点。 1. **依赖注入(Dependency Injection, DI)**: ...

    spring2.5的一个新特性

    标题中的“spring2.5的一个新特性”指的Spring框架的第2.5版本中引入的重要更新。Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能来简化应用程序的构建,包括依赖注入、面向切面编程(AOP)、...

    spring2.5的所有jar包

    Spring 2.5版本是该框架的一个重要里程碑,它引入了许多改进和新功能,为开发者提供了更好的灵活性和控制力。以下是关于Spring 2.5的一些关键知识点: 1. **依赖注入(Dependency Injection, DI)**:Spring的核心...

    Spring 2.5 AOP 例子

    Spring 2.5 AOP(面向切面编程)是Java应用程序中的一个重要概念,它允许开发者在不修改原有代码的情况下插入新的行为或监控。这个例子旨在帮助我们理解和应用Spring框架的AOP特性。以下是对该主题的详细解释: 一...

    spring 2.5中文帮助文档

    通过阅读《Spring2.5-中文参考手册.chm》这份文档,开发者可以深入了解Spring 2.5的各种特性和用法,解决实际开发中遇到的问题,提升开发效率。文档不仅包含详细的API参考,还包含丰富的示例和最佳实践指导,是学习...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    总的来说,Struts2.1、Spring2.5和Hibernate3.3的整合为开发者提供了一个强大的开发平台,可以高效地构建复杂的Java Web应用。尽管现代框架如Spring Boot已逐渐取代这种传统的整合方式,但对于理解企业级开发的底层...

    spring 2.5框架图

    Spring 2.5框架是Java开发中的一个里程碑版本,它为开发者提供了丰富的功能和改进,尤其是在企业级应用开发中。这个框架的核心在于IoC(Inversion of Control)和AOP(Aspect-Oriented Programming),旨在简化Java...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    Spring2.5是一个全面的后端应用管理框架,提供了依赖注入、AOP(面向切面编程)、数据访问等服务;Hibernate3.2则是一个对象关系映射(ORM)工具,简化了数据库操作。 首先,Struts1.2框架的核心是ActionServlet,...

    传智播客spring2.5源代码

    Spring 2.5 是一个历史悠久但仍然具有重要意义的版本,它是Spring框架发展中的一个重要里程碑。在这一版本中,Spring引入了许多关键改进和新特性,极大地提升了开发者的工作效率和应用程序的可维护性。以下是对...

    spring2.5常用包

    Spring 2.5 是 Spring 框架的一个重要版本,它在之前的版本基础上引入了许多增强功能和改进,为开发者提供了更强大的工具集。这个压缩包包含的“spring常用包”很可能是为了帮助开发者理解并使用 Spring 2.5 的核心...

    spring 2.5依赖包

    Spring 2.5是Spring框架的一个重要版本,它在2008年发布,引入了许多增强的功能和改进,为开发者提供了更加完善的Java企业级应用开发环境。在这个版本中,Spring框架进一步提升了其灵活性、可扩展性和易用性,使得...

    Spring2.5-中文参考手册chm.zip

    Spring 2.5版本是该框架的一个重要里程碑,引入了许多新特性和改进。这个"Spring2.5-中文参考手册chm.zip"文件包含了关于Spring 2.5版本的详细中文指南,对于学习和理解Spring框架具有很高的价值。 Spring框架的...

    spring2.5必备jar包

    总的来说,Spring 2.5版本是Spring发展过程中的一个重要里程碑,它不仅包含了丰富的特性,如依赖注入、事务管理、AOP,而且对JTA的支持也使得开发者可以在无需应用服务器的情况下处理复杂的分布式事务。虽然许多功能...

    spring2.5中文文档(PDF)

    《Spring 2.5中文文档》是一份详细阐述Spring框架2.5版本特性和使用方法的资源,旨在帮助开发者深入理解和高效应用这一流行的Java企业级应用程序开发框架。这份文档是中文版,对于中国开发者来说,提供了更为便捷的...

    spring2.5 mvc_ibatis2

    Spring 2.5版本是Spring发展史上的一个重要里程碑,它引入了许多新特性,使得开发更加高效。同时,iBatis作为一个轻量级的持久层框架,通过SQL映射文件将Java代码与数据库操作分离,提供了良好的可维护性。当这两个...

    spring2.5 定时器任务

    根据给定的部分内容,我们可以看到一个典型的Spring2.5定时任务配置示例。下面对这些配置进行详细解读: ##### 1. 线程池配置(`ThreadPoolTaskExecutor`) ```xml &lt;bean id="executor" class="org.spring...

Global site tag (gtag.js) - Google Analytics