`
wcdzxxgc
  • 浏览: 82335 次
  • 性别: 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 似乎就是这个东西

相关推荐

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

    FreeMarker通用模板。... 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据

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

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

    MySQL工具包

    * 调用此方法,需要自定义一个类实现RowMapper接口,该接口返回泛型,该泛型为该方法返回值集合的泛型 * @param sql * :SQL语句,参数用"?"表示 * @param rm * :rm为RowMapper接口的实现类所产生的对象 ...

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

    基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,支持MySql、SqlServer、Oracle数据库,强弱类型完美结合 1、mini-jdbc:针对spring jdbc的一些不方便的地方,做了一些封装,大小写不敏感,简化了日常的...

    springMVC4.0.6+spring4.0.6+hibernate4.3.6

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

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

    合集中的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 SpringTest它是针对Junit单元测试的整合。让我们在开发中以及开发后期进行测试时,直接使用Junit结合...

    spring.net中文手册在线版

    Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...

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

    10、提供Entity代码生成接口,Entity并非简单的pojo(尽可能不要去修改此类),引入字段常量类,方便查询的时候指定选择字段,从而更好实现查询条件的封装; 二、为什么写SBORM? 1、hibernate:过于臃肿,...

    rest风格+jdbctemplate的CRUD操作.rar

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

    SpringData@Query的注释的代码实现

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

    java从mdb中读取并显示数据

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

    JavaEE的Spring JDBC与事务管理 实验

    2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二、 实验内容 1、在MySQL中创建以下...

    利用spring的jdbcTemplate处理blob、clob

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

    thucydides-junit-0.9.125.zip

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

    spring.doc

    拓展spring为类中的属性赋值: 40 小结: 47 面向接口编程: 47 4 面向切面编程 52 4.1 代理模式 52 代理模式拓展: 52 4.1.1 JDK动态代理 58 JDK动态代理拓展: 59 4.1.2 CGLIB做代理 66 CGLIB动态代理拓展: 68 ...

    javascript:void(0);

    * 把一条材料信息加入到数据库中 */ public void addMr(String mtime,String mzno,String mpeople,String mname,String mquantity,double mmoney,String mno){ try { String sql = "insert into ...

    red5连接池

    1,解压jar到项目:WEB-INF\lib目录下 commons-dbcp-1.2.1.jar json-lib-2.4-jdk15.jar mysql-connector-java-5.1.9.jar spring-dao.jar spring-jdbc.jar 2,修改项目目录下的:red5-web.properties 添加:db....

    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。 当重用映射器用于例如连接查询时可能会有所帮助,其中不同表中的列名可能会发生冲突。

Global site tag (gtag.js) - Google Analytics