`

使用反射封装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();

}
分享到:
评论

相关推荐

    SpringJdbcTemplate封装工具类

    - 如果是查询操作,可以使用`RowMapper`或`ResultSetExtractor`来映射结果到Java对象。 8. **性能考虑** 尽管SpringJdbcTemplate提供了便利,但在高并发、大数据量的场景下,可能需要考虑其性能。例如,大量数据...

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

    本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business Object)和服务层代码。这些组件在Spring框架中扮演着重要角色。 1. **...

    SQL语句封装

    在封装SQL时,考虑SQL的执行效率,合理使用索引,避免全表扫描,减少JOIN操作,以及适时地进行SQL缓存。 综上所述,SQL语句封装是提高开发效率、保证代码质量的重要手段。通过不同的封装方式,我们可以根据项目需求...

    ifunsu封装基于springjdbc的dao层api

    new RowMapper() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); // 其他...

    jdbcTemplate封装工程需要的jar包

    - `query(String sql, RowMapper&lt;T&gt; rowMapper)`:执行查询并使用自定义的RowMapper将结果映射到对象。 - `update(String sql)`:执行更新操作,如INSERT、UPDATE或DELETE。 - `execute(String sql)`:执行任意的...

    JdbcTemplate,自己封装的jdbc小框架

    params)`,查询通常使用`query(String sql, RowMapper&lt;T&gt; rowMapper, Object... params)`,删除操作则是`delete(String sql, Object... params)`。这些方法都处理了异常和资源关闭,使得代码更易读,更不易出错。 ...

    java数据库操作封装.zip

    这个"java数据库操作封装.zip"压缩包中的文件,如JDBCcontrol.java、ConnectionManagement.java、PreparedStatementSetter.java和RowMapper.java,都是围绕这个目标设计的。下面我们将详细讲解这些类和接口的功能...

    java基于jdbctemplate数据持久层操作封装

    args)`: 执行查询并使用RowMapper转换结果集为Java对象。 - `queryForList(String sql, Class&lt;T&gt; elementType, Object... args)`: 查询并返回List类型的集合。 - `queryForObject(String sql, RowMapper&lt;T&gt; ...

    JDBC 数据库连接和操作的封装

    - **使用RowMapper接口**:用户自定义映射规则,直接获取对象。 ```java public &lt;T&gt; List&lt;T&gt; query(String sql, RowMapper&lt;T&gt; rowMapper, Object... args) { // 实现细节略 } public interface RowMapper&lt;T&gt; { T...

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

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

    Spring3 JDBC 通用DAO封装2 dao层终于完成dao层大概上传完整代码

    在IT行业中,Spring框架是Java开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring3 JDBC(Java Database Connectivity)模块是Spring框架的一部分,它提供了对数据库操作的支持,简化了传统的JDBC编程。本篇...

    Spring_JdbcTemplete代码包.zip

    使用`queryForObject(String sql, Object[] args, RowMapper&lt;T&gt; rowMapper)`进行参数化的单行查询,或者`query(String sql, PreparedStatementSetter pss, RowMapper&lt;T&gt; rowMapper)`,使用PreparedStatementSetter...

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

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

    Sping封装的JDBC应用小例子

    Spring框架是Java开发中广泛使用的轻量级框架,它提供了对数据库操作的强大支持,通过封装JDBC(Java Database Connectivity)来简化数据访问。在本例中,我们将深入探讨Spring如何通过JdbcTemplate实现对数据库的...

    day39-Spring 18-Spring的JDBC模板:查询的操作

    1. `query(String sql, RowMapper&lt;T&gt; rowMapper)`:此方法用于执行SQL查询,并使用RowMapper将结果行映射为自定义对象。RowMapper是一个接口,你需要实现`mapRow(ResultSet rs, int rowNum)`方法,该方法将ResultSet...

    SpringData@Query的注释的代码实现

    在Java开发领域,Spring Data是一个强大的框架,它简化了数据访问层的实现,尤其是在使用JPA(Java Persistence API)时。`@Query`是Spring Data JPA提供的一个关键注解,用于执行自定义的SQL或者HQL(Hibernate ...

    Spring JdbcTemplate 常用方法整理

    `JdbcUtils.java`可能是提供了一些数据库连接和JdbcTemplate使用的辅助方法,如数据库连接池的配置,或者封装了JdbcTemplate的执行方法,以提高代码复用性。例如: ```java public class JdbcUtils { private ...

    小码农的代码(一)----------SpringJDBC的使用

    例如,`query(String sql, RowMapper&lt;T&gt; rowMapper)`方法用于执行SQL查询,并使用RowMapper将结果集映射到Java对象。RowMapper是一个接口,需要实现`mapRow(ResultSet rs, int rowNum)`方法,将ResultSet中的每一行...

    JdbcTemplate.7z

    《JdbcTemplate:JDBC的高效封装利器》 在Java编程领域,JDBC(Java Database Connectivity)作为连接数据库的标准接口,一直以来都是数据访问的核心组件。然而,JDBC的原始API使用起来较为繁琐,需要处理诸如连接...

Global site tag (gtag.js) - Google Analytics