`
123003473
  • 浏览: 1064409 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring 里的一个新东西, 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的建表脚本如下:

  代码 

/*  
管理员表  
*/  
CREATETABLEadmin(  
 idintidentity(1,1)primarykey,  
 usernamevarchar(20)notnull,  
 passwordvarchar(32)notnull,   
)


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

代码
/**
* 
*/ 
packagedb.demo;  
/**
*@authorzhangyong
* 
*@version8:11:57PM
* 
*/ 
publicclassAdmin{  
    privateintid;  
    privateStringusername;  
    privateStringpassword;  
    publicintgetId(){  
        returnid;  
    }  
    publicvoidsetId(intid){  
        this.id=id;  
    }  
    publicStringgetUsername(){  
        returnusername;  
    }  
    publicvoidsetUsername(Stringusername){  
        this.username=username;  
    }  
    publicStringgetPassword(){  
        returnpassword;  
    }  
    publicvoidsetPassword(Stringpassword){  
        this.password=password;  
    }  
}


以前,在相应的AdminDAO中,我们以前是这么做滴,看起来很麻烦,如果一个表的字段很多的话,就要人命了,我们必须不停的set、get:
/**
* 
*/ 
packagedb.demo;  
importjava.sql.ResultSet;  
importjava.sql.SQLException;  
importjava.util.List;  
importorg.springframework.jdbc.core.RowMapper;  
importorg.springframework.jdbc.core.support.JdbcDaoSupport;  
/**
*@authorzhangyong
* 
*@version10:05:37PM
* 
*/ 
publicclassAdminDAOextendsJdbcDaoSupport{  
    privatefinalStringID="id";  
    privatefinalStringUSERNAME="username";  
    privatefinalStringPASSWORD="password";  
    privatefinalStringTABLE_NAME="admin";  
    /**
    *查询记录总数

    */ 
    publicListqueryAll(){  
        finalStringsql="Select*from"+TABLE_NAME;  
          
        returngetJdbcTemplate().query(sql,newRowMapper(){  
            publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException{  
                Adminadmin=newAdmin();  
                admin.setId(rs.getInt(ID));  
                admin.setUsername(rs.getString(USERNAME));  
                admin.setPassword(rs.getString(PASSWORD));  
                returnadmin;  
            }  
              
        });  
    }  
}  


/**
* 
*/ 
packagedb.demo;  
importjava.util.List;  
importorg.springframework.jdbc.core.BeanPropertyRowMapper;  
importorg.springframework.jdbc.core.support.JdbcDaoSupport;  
/**
*@authorzhangyong
* 
*@version10:05:37PM
* 
*/ 
publicclassAdminDAOextendsJdbcDaoSupport{  
    privatefinalStringTABLE_NAME="admin";  
    /**
    *查询记录总数

    */ 
    publicListqueryAll(){  
        finalStringsql="Select*from"+TABLE_NAME;  
          
        returngetJdbcTemplate().query(sql,newBeanPropertyRowMapper(Admin.class));  
    }  
}



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

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

【转载地址】http://licg1234.blog.163.com/blog/static/1390823332010230111137644/
分享到:
评论

相关推荐

    使用Spring的JdbcTemplate和BeanPropertyRowMapper完成的JDBC

    使用Spring的JdbcTemplate和BeanPropertyRowMapper完成的JDBC我的实例 博文链接:https://zmx.iteye.com/blog/373454

    spring Security 工具类 spring Security 工具类

    spring Security 工具类 spring Security 工具类spring Security 工具类 spring Security 工具类spring Security 工具类 spring Security 工具类spring Security 工具类 spring Security 工具类spring Security 工具...

    java *spring工具类 方便在非spring管理环境中获取bean

    java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...

    好的spring东西

    首先,Spring框架是一个广泛使用的Java平台轻量级框架,它简化了应用程序开发,提供了模块化支持、依赖注入(Dependency Injection, DI)、面向切面编程(AOP)等功能。下面将详细解释这些概念及其在Spring中的应用...

    spring 4.3.14(全)最新的spring4正式版

    Spring 框架是 Java 开发中的一个核心组件,它为构建企业级应用程序提供了全面的编程和配置模型。Spring 4.3.14 是该框架的最后一个4.x系列正式版,发布于2018年2月24日。这个版本在Spring 5.0发布之前提供了一个...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是一个模板类,它提供了大量的方法来执行SQL查询、更新、存储过程等操作。这些方法会自动处理JDBC相关的资源关闭、异常转换等细节,使得代码更加整洁和健壮。 2. **数据库自适应** Spring...

    spring-boot-1-demo

    Spring Boot 是一个基于 Spring 框架的快速开发工具,它简化了新 Spring 应用程序的初始搭建以及开发过程。这个名为 "spring-boot-1-demo" 的项目是 Spring Boot 的一个入门示例,旨在帮助开发者理解如何创建并运行...

    Spring试题和答案.pdf

    )Spring是一个重量级的框架 )Spring是一个轻量级的框架 )Spring是一个IOC和AOP容器 )Spring是一个入侵式的框架 )下面关于IOC的理解,正确的是(A B)(选择两项) )控制反转 )对象被动的接受依赖类 )...

    OSGI整合Spring、Mybatis、Spring MVC实现一个登录应用案例

    在这个登录应用案例中,我们可能首先创建一个Spring配置,定义一个表示用户的实体类,以及对应的Mybatis映射文件。接着,创建一个Spring MVC控制器,处理登录请求,验证用户名和密码,然后调用业务逻辑服务。业务...

    最新spring官网下载jar包 spring-4.2.4(免费)

    Spring AOP(面向切面编程)是另一个关键特性,它允许开发者定义横切关注点,如日志记录、事务管理等,这些关注点可以跨多个类和方法应用。4.2.4版本的AOP支持更广泛的切面定义,包括基于注解的切面,使得代码更整洁...

    Spring Boot整合Spring Batch,实现批处理

    在这个提供的压缩包文件中,名为"batch"的文件可能包含了一个简单的Spring Boot和Spring Batch整合的示例项目。这些文件可能包括Java源代码、配置文件以及可能的测试用例。通过查看这些文件,你可以学习如何将批处理...

    java spring 工具类 java spring 工具类

    java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类

    最新最全的spring开发包

     这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    例如,可能会有一个自定义的MyBatis拦截器用于分页查询,一个Spring AOP切面用于记录操作日志,Spring事务管理确保数据的一致性,而反射工具类可能用于动态加载配置或处理某些通用的反射任务。通过这些组件的组合,...

    spring2.0升级到spring3.0.5的开发包

    从Spring 2.0升级到Spring 3.0.5是一个重要的版本迭代,因为每个新版本通常会引入新的特性和性能优化。 Spring 2.0是Spring框架的一个里程碑,它引入了AOP代理、JDBC抽象层、对JSF的支持以及对portlet的集成。然而...

    Spring Integration + Spring WS 整合

    在这个项目中,我们成功地将 Spring Integration 和 Spring WS 整合在一起,实现了一个完整的 Web 服务解决方案。这个项目对新手入门非常友好,因为它提供了一个简单的示例代码,使得开发者可以快速上手。

    spring4.x中的jar包下载,spring4.0.6下载,spring最新稳定版jar包下载

    spring4.x中的jar包下载,spring4.0.6下载,spring最新稳定版jar包下载 http://maven.springframework.org/release/org/springframework/spring/ 这个链接中有各种稳定版的jar包下载 目前官网上大部分都要maven下载

    spring与java反射结合动态定义类及调用函数

    spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。

    spring最新版本4.3.3所有jar包

    Spring 4.3.3是该框架的一个稳定版本,发布于2016年,虽然现在已经有了更高级的版本,但4.3.3仍然是许多项目中的常用选择。这个压缩包包含的是Spring框架4.3.3版本的所有核心和可选组件的jar包,对于理解和使用...

Global site tag (gtag.js) - Google Analytics