数据库对象映射为java对象,不使用框架

方法:

public static <T> List<T> processResultSetToList(ResultSet rs, Class<T> clazz) throws Exception {
        List<T> ls = new ArrayList<T>();
        Field[] fields = clazz.getDeclaredFields();
        while (rs.next()) {
            T tt = clazz.newInstance();
            for (Field field : fields) {
                try {
                    /**
                     * 如果Oracle数据库中的类型是 number p.getWriteMethod().invoke(tt, new
                     * Object[] { rs.getObject(p.getName()) }) 会报如下错误
                     * java.lang.IllegalArgumentException: argument type
                     * mismatch --- 另外如果mysql数据库中的bigint 在进行setXxxx(Integer
                     * val)时候也会抛出该异常 也会抛出该异常
                     */
                    Object value = null;
                    try {
                        String fieldName = getColumnName(field);
                        switch (TypeUtils.getMappedType(field)) {
                        case Long:
                            value = Long.valueOf(rs.getLong(fieldName));
                            break;
                        case Integer:
                            value = Integer.valueOf(rs.getInt(fieldName));
                            break;
                        case Double:
                            value = Double.valueOf(rs.getDouble(fieldName));
                            break;
                        case Byte:
                            InputStream ins = rs.getBinaryStream(fieldName);
                            if(ins != null){
                                value = IOUtils.toByteArray(ins);
                            }
                            break;
                        case Date:
                            /**
                             * 15-12-8
                             * 转为util.Date
                             */
                            Timestamp t = rs.getTimestamp(fieldName);
                            if(t!=null){
                                value = new Date(t.getTime());
                            }
                            break;
                        default:
                            value = rs.getObject(fieldName);
                            break;
                        }
                    } catch (Exception e) {// 如果仅仅查询Class的部分字段
                        if (e.getMessage().matches("Column\\s+‘.+?‘\\s+not\\s+found.")) {
                            switch (TypeUtils.getMappedType(field)) {
                            case Long:
                            case Integer:
                                value = 0;
                                break;
                            default:
                                value = null;
                                break;
                            }
                        }
                    }
                    field.setAccessible(true);
                    if(value != null){
                        field.set(tt, value);
                    }
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
            }
            ls.add(tt);
        }
        DBUtils.close(rs, null, null);
        return ls;
    }
时间: 2024-08-06 03:22:05

数据库对象映射为java对象,不使用框架的相关文章

【代码分享——Java&amp;Json】Json转成java对象,已经java对象转成Json对象

做记录用,肯定有地方不完整,先放着吧 [代码分享--Java&Json]Json转成java对象,已经java对象转成Json对象,布布扣,bubuko.com

json字符串转json对象,json对象转换成java对象

@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @ResponseBody public void updateInvestorApplyAccountNo(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) { int num = 0;

json字符串转成 json对象 json对象转换成java对象

import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version></dependency> String r

rest-assured的对象映射(Object Mapping)

rest-assured支持映射Java对象到Json和XML以及从Json和XML中映射到Java对象.Json映射需要在classpath 中有Jackson.Jackson 2或者是Gson,XML映射需要在classpath 中有JAXB. 1.JsonPath映射 例如:让我们来看一下我们想提取第一个winner到JavaBean对象中: Json数据准备: 1 {"lotto":{ 2 "lottoId":5, 3 "winning-numbe

Java对象及其引用 (1)

Java对象及其引用 [文章转载自:http://zwmf.iteye.com/blog/1738574] 说明:所有转载为个人学习存档使用,凡转载内容均注明转载出处.以后不再说明. 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很好地理解下面的面向对象技术.把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路. 为便于说明,我们先定

java对象生命周期

java中一个对象的完整生命周期涉及java平台的很多技术.在创建一个java对象之前,需要先由虚拟机加载该类,然后对该java类进行链接和初始化.初始化完成之后,才创建出该类的对象实例.java对象也有自己的初始化过程,主要通过构造方法完成.当不再有引用指向该对象时,对象占用的内存会在合适的时机被垃圾回收器回收.对象终止机制提供了一种方式在对象被回收之前进行清理工作. java类的链接 虚拟机刚启动时,内部只包含java核心类的相关信息.随着程序的运行,不断有新的java类被加载到虚拟机中.j

java对象与json对象间的相互转换

1.解析json字符串 将json字符串转换为json对象,然后再解析json对象:. JSONObjectjsonObject = JSONObject.fromObject(jsonStr); 根据json中的键得到它的值 Stringname = jsonObject.getString("name"); int age = jsonObject.getInt("age"); 2.将json字符串转换为java对象 同样先将json字符串转换为json对象,再

Android Studio NDK 入门教程(5)--Java对象的传递与修改

概述 本文主要Java与C++之间的对象传递与取值.包括传递Java对象.返回Java对象.修改Java对象.以及性能对比. 通过JNIEnv完成数据转换 Java对象是存在于JVM虚拟机中的,而C++是脱离JVM而运行的,如果在C++中访问和使用Java中的对象,必然会使用JNIEnv这个桥梁.其实通过下面的代码很容易看出,这种访问方式和Java中的反射十分雷同. 这里定义一个简单Java对象用于下文测试: package com.example.wastrel.hellojni; /** *

json对象转化Java对象

public static void main(String[] args) { String studentJson="{\"username\":\"xiaoming\",\"age\":20,\"desc\":\"好学生\"}"; String studentJson2="{\"username\":\"xiaohong\",\&q