`

使用反射封装RowMapper

    博客分类:
  • java
 
阅读更多
package com.xinhuanet.cloudDesk.dao.impl;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.log4j.Logger;
import org.springframework.jdbc.core.RowMapper;

public abstract class BaseRowMapper<T> implements RowMapper {
	private static final Logger log = Logger.getLogger(BaseRowMapper.class);

	@Override
	public T mapRow(ResultSet rs, int index) throws SQLException {
		try {
			Class clazz = Class.forName(this.getClassName());
			Object obj = clazz.newInstance();

			for (Class clazztemp = clazz; clazztemp != Object.class; clazztemp = clazztemp
					.getSuperclass()) {
				
				Field[] fields = clazztemp.getDeclaredFields();
				if (fields == null) {
					return null;
				}
				for (int i = 0; i < fields.length; i++) {
					String fieldName = fields[i].getName();
					Class fieldClass = fields[i].getType();
					String methodName = "set"
							+ fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1);
					Method method = clazztemp.getDeclaredMethod(methodName,
							new Class[] { fieldClass });
					Object param = null;
					try {
						param = rs.getObject(fieldName.toLowerCase());
						if(param != null) {
							method.invoke(obj, param);
						}
					} catch (Exception e) {
						log.error("fieldName:" + fieldName + "是" + fieldClass
								+ "目标参数是:" + param.getClass());
						log.error(e);
					}
				}
			}

			return (T) obj;

		} catch (Exception e) {
			log.error(e);
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 子类的类名
	 * 
	 * @return
	 */
	public abstract String getClassName();

}
分享到:
评论

相关推荐

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码,代码可以直接复制到项目中使用,代码是基于pring框架的

    基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate

    基于spring jdbc的RowMapper自动实现对象映射,大部分功能已经由spring jdbc实现了。2、数据类型的设计:集成了JFinal和SBORM的优点,对字段的大小写不敏感,对强类型实体、弱类型实体和非实体的支持。3、统一的接口...

    FreeMarker模板包括dto、dao、rowmapper、bo、service

    FreeMarker通用模板。... 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。... 那就意味着要准备数据在真实编程语言中来显示,比如...

    springMVC4.0.6+spring4.0.6+hibernate4.3.6

    springMVC4.0.6+spring4.0.6+hibernate4.3.6框架,基本的包结构,dao基础类的封装,rowmapper,分页等工具类的封装。

    SpringData@Query的注释的代码实现

    主要是如何利用@Query注释来完成增加,删除,的操作

    基于SpringJDBC的轻量级ORM框架sborm.zip

    2、基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,对于使用spring jdbc的人会有一点价值,比较简洁的封装可以节省很多重复劳动,具体节省多少可以看看example; 3、实现一套简单的ORM(直接使用...

    rest风格+jdbctemplate的CRUD操作.rar

    ④修改用户:先根据id查询员工(get请求),然后跳转到修改页面,使用form标签回显当前对象内容${pageContext.request.contextPath }/emp"method="post" modelAttribute="employee"&gt;然后将封装好的对象传给控制器...

    Spring高级之注解驱动开发视频教程

    视频详细讲解,需要的小...n 设计模式-RowMapper的策略模式 n 高级应用-NamedParameterJdbcTemplate的使用 n 源码分析-TransactionTemplate n 源码分析-DataSourceUtils n 源码分析-TransactionSynchronizationManager

    java从mdb中读取并显示数据

    利用java小窗口读取mdb数据库中的数据,并将其显示出来

    spring.doc

    5.1.7 RowMapper的使用 107 拓展: 108 DataSource注入的三种方式: 108 5.1.8声明式事务管理 116 5.1.8.1Spring的事务管理器 117 5.1.8.2Spring事务的传播属性 117 5.1.8.3Spring事务的隔离级别 117 拓展: 118 5.1...

    JavaEE的Spring JDBC与事务管理 实验

    rowMapper public double findBookPriceByIsbn(String isbn); //更新书的库存,使书号对应的库存减num,若库存不足,则给出提示,并且不更新 public void updateBookStock(String isbn, int num); //更新用户的...

    MySQL工具包

    /** * 该方法可以创立数据库链接,须在项目src目录下配置文件名为:“jdbcutil.properties”的文件, ... * * @return Connection ... public static &lt;E&gt;List&lt;E&gt; query(String sql,RowMapper&lt;E&gt; rm,Object...obj)

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    spring.net中文手册在线版

    RowMapper 17.11.4. Query for a single object 17.11.5. Query using a CommandCreator 17.12. DataTable and DataSet 17.12.1. DataTables 17.12.2. DataSets 17.13. Deriving Stored Procedure Parameters 17.14...

    thucydides-junit-0.9.125.zip

    springjdbc-constructor-mapper.zip,spring的rowmapper实现,用于对其构造函数进行注释的类

    javascript:void(0);

    import org.springframework.jdbc.core.RowMapper; import entity.Material; public class MaterialService extends BaseService { /** * 把一条材料信息加入到数据库中 */ public void addMr...

    easyjdbc-spring-boot-starter:easyjdbc-spring-boot-starter在easyjdbc之上进行了一些自动spring boot配置

    动态实体映射使得各种查询不再需要写大量的RowMapper。功能简介:1:常用的JPA注解支持。2:简化的批处理操作。4:简化的分页操作。5:灵活的链式查询API和SQL构造器。6:实体属性动态映射。7:支持多种数据库...

    jdbc-helpers:Jdbc助手

    jdbc助手MetadataAwareRowMapper(Spring RowMapper)的Poc。 当重用映射器用于例如连接查询时可能会有所帮助,其中不同表中的列名可能会发生冲突。

    red5连接池

    final List l = t.query("SELECT * FROM jt_employee", new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { MappedRow(rs.getInt(1), rs.getString(2)); } }); ...

Global site tag (gtag.js) - Google Analytics