`

用RowMapper封装查询结果自定义类(转)

 
阅读更多
package object;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

public class ObjectRowMapper implements RowMapper{
    private Class className;
    
    public ObjectRowMapper(Class className){
        this.className = className;
    }
    
    /*
     * 该方法自动将数据库字段对应到Object中相应字段
     * 要求:数据库与Object中字段名相同
     * 
     */
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        
        
        Object nt = new Object();
        Field[] fields = className.getDeclaredFields();
        try {
            nt = className.newInstance();
            for (Field field : fields) {
                //如果结果中没有改field项则跳过
                try {
                    rs.findColumn(field.getName());
                } catch (Exception e) {
                    continue;
                }
                //修改相应filed的权限
                boolean accessFlag = field.isAccessible();
                field.setAccessible(true);
                String value = rs.getString(field.getName());
                value = value==null?"":value;
                setFieldValue(nt, field, value);
                
                //恢复相应field的权限
                field.setAccessible(accessFlag);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return nt;
    }
    
    /*
     * 根据类型对具体对象属性赋值
     */
    public static void setFieldValue(Object form, Field field, String value) {

        String elemType = field.getType().toString();

        if (elemType.indexOf("boolean") != -1||elemType.indexOf("Boolean") != -1) {
            try {
                field.set(form, Boolean.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("byte") != -1||elemType.indexOf("Byte") != -1) {
            try {
                field.set(form, Byte.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("char") != -1||elemType.indexOf("Character") != -1) {
            try {
                field.set(form, Character.valueOf(value.charAt(0)));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("double") != -1||elemType.indexOf("Double") != -1) {
            try {
                field.set(form, Double.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("float") != -1||elemType.indexOf("Float") != -1) {
            try {
                field.set(form, Float.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("int") != -1||elemType.indexOf("Integer") != -1) {
            try {
                field.set(form, Integer.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("long") != -1||elemType.indexOf("Long") != -1) {
            try {
                field.set(form, Long.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else if (elemType.indexOf("short") != -1||elemType.indexOf("Short") != -1) {
            try {
                field.set(form, Short.valueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else {
            try {
                field.set(form, (Object) value);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}

 

分享到:
评论

相关推荐

    JdbcTemplate,自己封装的jdbc小框架

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

    java数据库操作封装.zip

    4. **RowMapper.java**: RowMapper是Spring框架中常见的一种接口,用于将数据库查询结果的每一行映射为Java对象。在这个压缩包中,这个接口可能被用来将数据库查询的结果转换为自定义的Java对象。开发人员可以实现这...

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

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

    JAVA 版本ResultSet 转换为JAVABEAN的工具类

    在Java编程中,ResultSet是处理数据库查询结果的主要接口,它由Statement或PreparedStatement对象执行SQL查询后返回。...通过创建这样一个工具类,我们可以方便地将数据库查询结果封装成易于操作的对象,简化业务逻辑。

    jdbcTemplate封装工程需要的jar包

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

    JAVA调用ORACLE存储过程通用类

    - **`StoredQueryInfo`**:该类封装了存储过程的元信息,如名称、参数等,方便在调用过程中使用。 - **`RowMapper`**:这是Apache Commons DBUtils提供的一个接口,用于从数据库结果集中提取数据并映射到Java对象。...

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

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

    Spring JdbcTemplate查询实例

    这里,`queryForList`接受SQL语句和结果集映射类作为参数,它会自动将查询结果转换为指定类型的列表。 2. **参数化查询** Spring JdbcTemplate支持参数化的SQL查询,这可以避免SQL注入的风险。例如,使用`query`...

    MySQL增删改查工具类.zip

    - 查询(Query):`query(String sql, RowMapper<T> rowMapper)`方法用于执行SELECT语句,根据SQL语句获取结果集,并通过`RowMapper`接口将结果转换为自定义的对象。 3. **批处理操作**:如果需要批量执行SQL语句...

    Spring_JdbcTemplete代码包.zip

    - **简单查询**:使用`query(String sql, RowMapper<T> rowMapper)`方法执行查询,其中RowMapper用于将结果集转换为Java对象。 - **参数化查询**:使用`queryForObject(String sql, Object[] args, RowMapper<T> ...

    Spring JDBCTemplate

    它通过封装了JDBC的基本步骤,如打开和关闭连接、处理结果集等,使得开发者能够更专注于业务逻辑,而不是底层的数据库操作细节。 在JDBCTemplate的API中,`queryForXXX`系列方法主要用于从数据库查询数据,并返回...

    Sping封装的JDBC应用小例子

    `UserRowMapper`是一个自定义的RowMapper,用于将查询结果的每一行映射为一个User对象。 3. **参数化查询**: 如果需要带参数的SQL语句,可以使用`queryForObject`或`query`方法,传入PreparedStatement参数。例如...

    PageBean分页查询

    在上述代码中,`UserRowMapper`是自定义的RowMapper,用于将数据库查询结果映射到User对象。此外,为了获取总页数和总记录数,可能需要额外执行一次SQL,不带LIMIT和OFFSET的全表扫描,获取所有记录的数量,然后根据...

    springMVC4.0.6+spring4.0.6+hibernate4.3.6

    5. **Util工具类**:包括RowMapper,用于将数据库查询结果转换为Java对象;分页工具类,帮助实现高效的分页查询。 RowMapper是Spring JDBC中的一个接口,用于将数据库查询结果集的一行映射为一个Java对象。在项目中...

    jdbcTemplate相关jar包.zip

    - `query(String sql, RowMapper<T> rowMapper)`: 执行SQL查询并使用RowMapper将结果映射到自定义类型。 - `queryForObject(String sql, RowMapper<T> rowMapper, Object... args)`: 执行查询并期望只返回一个对象。...

    jdbc(template).zip

    同时,JDBC Template提供了一种机制将查询结果自动转换为Java对象,如List、Map或自定义的Java类。 4. **事务支持**:Spring JDBC Template提供了一套易于使用的事务管理API,可以方便地在业务代码中进行事务的开始...

    JdbcTemplate.7z

    在处理结果集时,JdbcTemplate提供了RowMapper接口,我们可以自定义映射规则,将数据库行数据转换为我们需要的Java对象。例如,实现RowMapper接口的`mapRow(ResultSet rs, int rowNum)`方法,根据列名或索引将...

    Spring_JdbcTemplate的用法

    Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具,它是Spring JDBC模块的核心组件,提供了对SQL查询的封装,使得数据库访问更为简单和安全。JdbcTemplate的API设计清晰,主要分为几个部分,其中包括...

    JdbcTemplate.rar

    结果映射是JdbcTemplate的一个关键特性,可以通过实现RowMapper接口自定义映射规则,或者使用BeanPropertyRowMapper自动将结果映射到Java Bean。 7. **事务管理** JdbcTemplate可以配合...

    Spring Framework 开发参考手册,数据库系统的JDBC驱动程序

    - **结果处理**:可以使用RowMapper或ResultSetExtractor将结果集转换为自定义对象。 5. **NamedParameterJdbcTemplate** 如果SQL语句中使用命名参数,NamedParameterJdbcTemplate会更方便。它允许使用命名参数...

Global site tag (gtag.js) - Google Analytics