`

JDBC:如何将resultset的信息自动封装到pojo里面

    博客分类:
  • Java
阅读更多

不多说了  直接上代码 

Java代码  收藏代码
  1. public static List resultSetToList(ResultSet rs) throws java.sql.SQLException{  
  2.        if(rs==null){  
  3.            return null;  
  4.        }  
  5.   
  6.        ResultSetMetaData md = rs.getMetaData();  
  7.        int columnCount = md.getColumnCount();  
  8.   
  9.        List list = new ArrayList();  
  10.        Map rowData;  
  11.        while (rs.next()){  
  12.            rowData = new HashMap(columnCount);  
  13.            for (int i=1; i<=columnCount; i++){  
  14.                  
  15.                    rowData.put(md.getColumnName(i),rs.getObject(i));  
  16.                  
  17.                 
  18.            }  
  19.            list.add(rowData);  
  20.        }  
  21.        return list;  
  22.    }  

首先将ResultSet封装成list  而每条记录对应一个实体Map 
Java代码  收藏代码
  1. import java.lang.reflect.InvocationTargetException;  
  2. import java.lang.reflect.Method;  
  3. import java.util.HashMap;  
  4. import java.util.Iterator;  
  5. import java.util.Map;  
  6. /** 
  7.  * <p>Title:属性封装类</p> 
  8.  * 
  9.  * <p>Description: </p> 
  10.  * 
  11.  * <p>Copyright: Copyright (c) 2008</p> 
  12.  * 
  13.  */  
  14. public class BeanUtils {      
  15.     /** 
  16.      *  
  17.      * @param bean 需要封装的vo 
  18.      * @param map 需要转换的map 
  19.      * @return 已经封装好数据的vo(object) 
  20.      */  
  21.     public static  Object MapToBean(Object bean, Map map) {  
  22.         Map methods = new HashMap();  
  23.         Method m[] = bean.getClass().getMethods();  
  24.         for (int i = 0; i < m.length; i++) {  
  25.             Method method = m[i];  
  26.             String methodName = method.getName().toUpperCase();  
  27.             methods.put(methodName, method);  
  28.         }  
  29.   
  30.         Iterator it = null;  
  31.         String key = "";  
  32.         it = map.keySet().iterator();  
  33.         while (it.hasNext()) {  
  34.             key = (String) it.next();  
  35.             String name = "GET" + key.toUpperCase();  
  36.             if (methods.containsKey(name)) {  
  37.                 Method setMethod = (Method) methods.get("SET" + key.toUpperCase());  
  38.                 try {  
  39.                     if(setMethod!=null){  
  40.                         Object[] obj=null;  
  41.                         obj=new Object[1];  
  42.                         obj[0]=map.get(key);  
  43.                     setMethod.invoke(bean, obj);  
  44.                     }  
  45.                     else{  
  46.                         continue;  
  47.                     }  
  48.                 } catch (IllegalAccessException e) {  
  49.                     e.printStackTrace();  
  50.                 } catch (InvocationTargetException e) {  
  51.                     e.printStackTrace();  
  52.                 }  
  53.   
  54.             }  
  55.         }  
  56.         return bean;  
  57.     }  
  58. }  


此方法是将上面查到的list作为参数  然后再将其list里面的map转换成相对性的pojo 

假设查询的是student表  与之对应的pojo是Student类  那么调用方法如下: 

首先查询数据  获取到resultset  
然后 
List  retultList=resultSetToList(resultset); 
遍历retultList  将list里面的Map都转换成pojo 
Student stu=(Student)BeanUtils.MapToBean(new Student(),(Map)retultList.get(0)); 

注意:查询出来的字段名要和pojo中的属性名相同  若查询出age字段 pojo中需有getAge和setAge方法  方法名大小写不限 

 

转自:http://hfkiss44.iteye.com/blog/568525

分享到:
评论
3 楼 dizh 2014-08-12  
写的很好~~~
2 楼 yuetao31512 2012-12-06  
setMethod.invoke(bean, obj); 
入参类型不匹配报错怎么办?我就遇到了这个问题
1 楼 crabboy 2011-05-11  
goodgoodgood

相关推荐

    删掉,复制别人东西,怕侵权,原本只想收藏的

    客服看到给我删掉,我只是想收藏这篇文章,这是复制别人的,怕侵权。...相对而言,Hibernate对JDBC的封装程度还是比较高的,我们已经不需要写SQL,只要使用HQL语言就可以了。 使用Hibernate进行编程有以下好处:

    jdbc基础和参考

    ORM:使用元数据信息来描述对象和数据库之间的关系,并且能够自动实现java中持久化对象到关系型数据库中表的映射 脏检查:自动对缓存中的数据进行检查,并且选择在合适的时机和数据库之间进行交互,以保持数据的...

    Java_JDBC由浅入深

    第十五节 jdbc轻量级封装 88 15.1 将结果集封装为Map 88 15.1.1 ResultSetMetaData演示 88 15.1.2解决多行记录的问题 89 15.1.3 Map结果集的封装 90 15.2 将结果集封装为对象 91 15.2.1 user表POJO的编写 91 15.2.2 ...

    mybatis框架课程.docx

    MyBatis框架课程 MyBatis是Apache的一个开源项目,始于iBatis,2010年迁移到...4. 结果集解析:MyBatis提供了结果集解析机制,使开发者可以轻松地将数据库记录封装成POJO对象,从而解决了结果集解析的硬编码问题。

    Mybatis复习文档

    如果能够将数据库记录自动封装到 POJO 对象中,将大大简化这一过程,提高代码的灵活性和可维护性。 #### 三、MyBatis 解决方案 针对上述 JDBC 编程存在的问题,MyBatis 提供了以下解决方案: 1. **数据库连接管理...

    数据库之间进行数据迁移代码实例

    本文将详细探讨如何使用JDBC(Java Database Connectivity)技术来实现这一目标,涉及的关键知识点包括数据库连接、表字段对应、对象封装以及批量导出数据等。 首先,JDBC是Java语言访问数据库的标准接口,它提供了...

    iBatis框架搭建用到的所有jar包

    纵观目前主流的 ORM(对象关系映射),无论 Hibernate还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过 ...

    Mybatis框架学习

    - **结果集映射**:自动将 SQL 查询的结果集映射到 Java 对象,大大减少了手工处理 ResultSet 的工作量。 - **动态 SQL**:支持基于条件的 SQL 生成,可以方便地根据不同的条件动态生成 SQL 语句。 #### 与 ...

    com-demo-database.zip

    - **结果集处理**:转换数据库查询结果为Java对象,如使用ResultSet映射到POJO(Plain Old Java Object)。 2. **原理解析**: - **JDBC基础**:该框架的基础是Java Database Connectivity (JDBC),它提供了与...

    Java Web图书管理系统(附上MySQL数据库)

    这些功能通常通过JavaBeans或POJO(Plain Old Java Object)类来封装,便于在各层之间传递数据。 数据层则主要负责与数据库的交互。这里采用的是MySQL数据库,MySQL是一款广泛使用的开源关系型数据库管理系统,以其...

    Mybatis框架基本介绍

    Mybatis框架会根据映射文件的配置,自动将数据库查询结果集中的数据填充到这些POJO对象中,也可以根据POJO对象中的值来构建SQL语句并执行。 Mybatis的使用过程中,开发者可以通过定义SQL映射文件来实现对数据库的...

    MyBatis.pdf

    - **自动结果集映射**:MyBatis 能够自动将查询结果映射到 Java 对象,极大地减少了手动处理 ResultSet 的工作量。 #### 五、MyBatis 与其他框架的集成 - **与 Spring 和 SpringMVC 的集成** - 在实际项目中,...

    JAVA WEB项目 开发案例精粹 源代码 包含20个案例(2),此包有7个案例

    开发者通常会使用Connection、Statement、PreparedStatement和ResultSet等JDBC接口。 5. **DAO(Data Access Object)设计模式**:为了更好地封装数据库操作,通常会创建DAO层。比如ch11或ch14可能展示了如何通过...

    Java 学习笔记极其详细版(包括一些个人色彩不仅仅是纯笔记)

    - Connection、Statement、ResultSet等接口的使用。 2. **数据库交互**: - SQL语句的执行。 - 结果集的处理。 #### Java Web技术 1. **Servlet**: - Servlet生命周期的理解。 - HttpServletRequest与...

    java_students_db

    它们将Java对象与数据库表映射,自动处理SQL语句的生成和执行,提高开发效率。 6. Transactions(事务):在处理数据库操作时,尤其是在涉及多条语句的复杂操作时,事务管理是至关重要的。Java提供`java.sql....

    springmybatis

    2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 ...

    Crud

    1. **Create(创建)**:在Java中,创建新记录通常涉及构建一个Java对象(POJO或Entity),然后使用JDBC的`PreparedStatement`或者ORM框架的方法将这个对象持久化到数据库中。比如,使用Hibernate,我们可以调用`...

    项目建立基础

    4. **实体类(Entity/Model/POJO/Domain)**:这些类位于`cn.tfs.model`包,用于封装数据,作为数据传输的对象。实体类通常包含get、set方法和toString方法,属性类型需与数据库字段类型匹配。 5. **Utils工具类**...

Global site tag (gtag.js) - Google Analytics