`
wcdzxxgc
  • 浏览: 83827 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

通用RowMapper封装查询结果到自定义类中

    博客分类:
  • Java
阅读更多
之前项目中利用JdbcTemplate进行查询时经常遇到需要将结果封装到具体自定义类中的情况,每次针对不同的类,不同的查询结果都要重新编写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();
            }
        }
    }
}
分享到:
评论
2 楼 diyunpeng 2012-11-30  
Obejct应该用newInstance吧
1 楼 每个人都可爱 2012-03-23  
BeanPropertyRowMapper 似乎就是这个东西

相关推荐

    SpringJdbcTemplate封装工具类

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

    JdbcTemplate,自己封装的jdbc小框架

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

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

    在Spring JDBC中,RowMapper接口用于将数据库查询结果的一行映射为一个Java对象。生成RowMapper代码时,通常会为每个DTO创建一个对应的RowMapper实现,这样可以在处理数据库查询结果时,方便地将结果集转换为DTO...

    Spring框架JdbcTemplate类中查询方法介绍

    JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法:execute 方法、update 方法及 batchUpdate ...

    JAVA调用ORACLE存储过程通用类

    该类的主要目的是提供一种机制来查询或执行Oracle数据库中的存储过程,并返回相应的结果。 ##### 2. 方法详解 - **queryProcedure**方法:该方法是核心处理方法,用于调用存储过程,并获取结果集。 - 参数列表: ...

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

    在Spring3中,我们可以通过接口定义通用的CRUD(Create, Read, Update, Delete)操作,然后创建一个实现该接口的抽象类,封装共性的JDBC操作,比如执行SQL、处理结果集等。这样,对于每个具体的数据库表,只需要创建...

    使用jdbcTemplate查询返回自定义对象集合代码示例

    另一种方法是使用JdbcTemplate的query()方法和RowMapper接口来查询数据库,并将查询结果转换为自定义对象集合。下面是一个示例代码: ```java public List<UserInfo> findAll() { String sql = "SELECT * FROM ...

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

    如果查询结果有多列,所有列值将被封装到一个Map对象中,其中键为列名,值为对应的列值。 4. `queryForObject(String sql, RowMapper<T> rowMapper, Object... args)`:当预期查询结果只有一行数据时,可以使用此...

    java数据库操作封装.zip

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

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

    - "基于jdbctemplate封装"可能包含一个或多个类文件,如BaseJdbcDao.java,它定义了通用的方法,以及针对特定业务的子DAO类,如UserDao.java,实现了用户相关的数据库操作。 7. **使用示例**: - 创建一个新的...

    jdbcTemplate封装工程需要的jar包

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

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

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

    SQL语句封装

    # 封装查询所有用户姓名的函数 def get_all_user_names(): s = select([users.c.name]) result = engine.execute(s) return [row[0] for row in result] ``` - **Java中的JDBC模板**:Spring框架提供了...

    jdbcTemplate相关jar包.zip

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

    JdbcTemplate通用泛型Dao实现

    2. **结果映射**:查询结果通常需要映射到Java对象。可以使用`RowMapper`或`ResultSetExtractor`来完成这个任务。 3. **事务管理**:`JdbcTemplate`支持事务,可以通过`@Transactional`注解来控制事务的边界。 在`...

    JdbcTemplate

    `JdbcTemplate`是模板方法设计模式的一个实例,将数据库操作的通用流程封装在模板类中,而具体的数据库操作(如SQL语句的执行)则由子类或者回调接口来实现。这种设计降低了代码的耦合度,使得扩展和维护变得更加...

    Spring JdbcTemplate 常用方法整理

    在`JsonBean.java`中,可能定义了一个用于存储数据库查询结果的Java bean类,它的属性与数据库表的字段相对应,通过`RowMapper`映射到对象。例如: ```java public class JsonBean { private String field1; ...

    Spring JdbcTemplate查询实例

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

    MySQL增删改查工具类.zip

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

    JdbcTemplate.7z

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

Global site tag (gtag.js) - Google Analytics