虽然项目中都夹杂了Hibernate的支持,但是团队开发中,很多人为了编写特殊查询的代码时都使用了JDBC进行查询。JDBC查询后返回的是一个List集合,List中组装的是Map,一个Map就是一个对应的对象。但是接口不能直接返回Map,都是返回的对象,以方便自己和其他人使用,为了转换这个Map,往往写这样的代码:
@SuppressWarnings("unchecked") public static MS_Mont analyzeMapToMS_Mont(Map map){ MS_Mont obj = new MS_Mont(); if(null != map.get("montNo")) obj.setMontNo(Integer.parseInt(map.get("montNo").toString())); if(null != map.get("montName")) obj.setMontName(map.get("montName").toString()); if(null != map.get("montType")) obj.setMontType(Integer.parseInt(map.get("montType").toString())); if(null != map.get("montLength")) obj.setMontLength(Integer.parseInt(map.get("montLength").toString())); if(null != map.get("montDesc")) obj.setMontDesc(map.get("montDesc").toString()); if(null != map.get("bigType")) obj.setBigType(Integer.parseInt(map.get("bigType").toString())); if(null != map.get("bigTypeName")) obj.setBigTypeName(map.get("bigTypeName").toString()); if(null != map.get("littleType")) obj.setLittleType(Integer.parseInt(map.get("littleType").toString())); if(null != map.get("littleTypeName")) obj.setLittleTypeName(map.get("littleTypeName").toString()); if(null != map.get("insertTime")) obj.setInsertTime(map.get("insertTime").toString()); if(null != map.get("updateTime")) obj.setUpdateTime(map.get("updateTime").toString()); if(null != map.get("userNoRe")) obj.setUserNoRe(Integer.parseInt(map.get("userNoRe").toString())); if(null != map.get("userNoLast")) obj.setUserNoLast(Integer.parseInt(map.get("userNoLast").toString())); return obj; }
很麻烦,很多,很枯燥。
为了解决这个问题,我列出一个解决方法,写一个方法,传入要赋值的对象和Map,然后根据列的属性名称从Map中获得响应的值,然后赋值给这个对象的属性。
例如,这里写了一个简单的查询:
public CM_Line getObjectBean(int lineNo) { try { String sql = "select * from cm_line where lineNo=?"; Object[] obj = new Object[]{ lineNo }; List rows = jdbcTemplate.queryForList( sql, obj ); if(null != rows && rows.size() > 0) { CM_Line line = new CM_Line(); return (CM_Line) line.analyzeMap((Map)rows.get(0)); } else { return null; } } catch (Exception e) { logger.error(e); } return null; }
然后我们调用了他的analyzeMap方法,这个方法把当前对象当作要赋值的对象,然后调用公用方法进行组装:
public Object analyzeMap(Map<String, Object> para){ Object obj = this; ObjectUtil.setValToObj(obj, para); return obj; }
公用方法:
public synchronized static void setValToObj(Object entityName, Map<String, Object> para){ try { Class c = entityName.getClass(); // 获得对象属性 Field field[] = c.getDeclaredFields(); for (Field f : field) { try { PropertyDescriptor pd = new PropertyDescriptor(f.getName(), c); Method writeMethod = pd.getWriteMethod(); if(!CommonCheck.isNullOrEmpty(para.get(f.getName()))) writeMethod.invoke(entityName, para.get(f.getName())); } catch (Exception e) { } } } catch (Exception e) { } }
下面就有人说了,那根据对象获得这个对象的Map怎么搞,这个之前已经写过了,不这里仍然把代码放一下:
/** * 返回一个对象的属性和属性值 */ public synchronized static LinkedHashMap<String,String> getProAndValMap(Object entityName) { LinkedHashMap<String,String> map = new LinkedHashMap<String, String>(); try { Class c = entityName.getClass(); // 获得对象属性 Field field[] = c.getDeclaredFields(); for (Field f : field) { Object v = invokeMethod(entityName, f.getName(), null); if(null != v) map.put(f.getName(), v.toString()); else map.put(f.getName(), ""); } } catch (Exception e) { map = null; } return map; } /** * 获得对象属性的值 */ private synchronized static Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { Class ownerClass = owner.getClass(); methodName = methodName.substring(0, 1).toUpperCase() + methodName.substring(1); Method method = null; try { method = ownerClass.getMethod("get" + methodName); } catch (Exception e) { } return method.invoke(owner); }
请您到ITEYE网站看原创,谢谢!
http://cuisuqiang.iteye.com/ !
自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!
相关推荐
本文将深入探讨如何在Java中利用Spring JDBC将数据库查询结果转换为Map对象。 首先,确保已经引入了Spring JDBC的相关依赖。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.spring...
本文将深入探讨如何通过封装JDBC来提高数据库操作的效率,特别是使用Map数据结构实现快速的增删改操作。我们将以`BaseDao`类为例,位于项目的`util`包下。 首先,理解JDBC的基础知识是必要的。JDBC提供了一组接口和...
这个主题可能是关于如何在Java程序中使用Map对象,将它们序列化为XML格式,并通过JDBC连接进行数据库操作。 首先,让我们深入了解一下Map接口。在Java中,Map是用于存储键值对的数据结构,其中每个键都是唯一的。它...
例如,当从数据库查询结果转换为Java对象时,或者在网络间传递数据时,`Map`经常被用作中间载体。 在项目开发中,我们可能会遇到需要将`Map`转换为`JavaBean`,或者反过来将`JavaBean`转换为`Map`的情况。反射机制...
1. 创建一个ArrayList来存储转换后的Map对象,每个Map对象代表ResultSet中的一行数据。 2. 获取ResultSet的元数据(ResultSetMetaData),这可以提供关于列的信息,如列的数量、名称等。 3. 使用while循环遍历...
在这个场景下,我们讨论的是如何从数据库查询数据,将结果封装成Map对象,然后通过JSP(JavaServer Pages)页面显示在表格中,并且提供删除操作。下面将详细阐述这一过程涉及的知识点。 首先,我们要理解Map数据...
在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ResultSet 对象,该对象包含了查询结果集的所有记录。为了方便数据处理和使用,我们需要将 ResultSet 转为 List<Map>,以便于后续的数据处理和展示。 下面是将...
这类库通常会提供方便的方法来执行SQL查询,获取结果集并将其转换为Map对象或VO(Value Object)对象,以便于数据处理和业务逻辑操作。 在描述中提到的“NULL 博文链接:https://taoge-tony.iteye.com/blog/1973356...
- `DriverManager`是JDBC的核心类之一,负责加载JDBC驱动以及根据提供的数据库URL创建`Connection`对象。 - 常用方法包括: - `getConnection(String url, String user, String pwd)`: 根据URL、用户名和密码建立...
在"struts+jdbc+dwr 实现googlemap功能"的项目中,开发者利用这些技术构建了一个功能,当用户点击地图上的特定图标时,会显示相关的公司信息,如公司电话和名称。以下是对这个项目的详细解释: 首先,Struts框架在...
在JDBC中,查询的结果通常会返回一个ResultSet对象,我们需要遍历这个结果集来获取数据。ResultMaker可能提供了便利的方法,如将ResultSet转换成List、Map或者其他自定义的数据结构,方便业务层进行数据处理。这可以...
存储过程是预先在数据库中编译好的SQL语句集合,通过Java的JDBC(Java Database Connectivity)API可以调用这些存储过程。以下是一个基本示例,假设有一个名为`getEmployee`的存储过程: ```java CallableStatement...
2. **自动资源管理**:包括连接、语句对象等,Spring JDBC会自动创建、关闭,避免了资源泄露。 3. **参数绑定**:支持PreparedStatement的参数绑定,有效防止SQL注入。 4. **结果集映射**:通过RowMapper或...
它通过映射Java类到数据库表,使得开发者可以避免编写大量的JDBC代码,而是以对象的方式操作数据。 2. Hibernate配置: 在使用Hibernate之前,需要进行一些基本的配置,包括创建`hibernate.cfg.xml`配置文件,定义...
- `findALLDepts()` 方法将查询结果转换为自定义的`Dept`对象列表。 3. **删除操作** (`delete()`): - 该方法接受一个部门ID作为参数,并执行删除操作。 4. **主方法** (`main()`): - 通过`SpringUtil.getBean...
本文将详细介绍如何利用JDBC连接不同的数据库,并执行SQL查询语句,同时将查询结果存储到`ArrayList`中返回,其中字段名统一转换为大写形式。 #### 二、JDBC连接数据库 JDBC是一种用于执行SQL语句的标准Java API,...
JDBC(Java Database Connectivity)是Java编程语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它是Java平台的标准部分,允许程序员以一种标准的方式与各种关系...
6. **处理结果**:对于查询语句,`executeQuery()`返回ResultSet对象,可以遍历查询结果。 7. **关闭资源**:在完成数据库操作后,应依次关闭ResultSet、Statement和Connection,释放数据库资源。 DBUtils是Apache...
一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List<Map, Object>>结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List<Map, Object>>转化为...
#### 二十四、利用结果集元数据将查询结果封装为Map - **实现方式**: - 使用`ResultSetMetaData`获取结果集的列信息。 - 通过`getColumnLabel()`方法获取列别名或名称。 - 将每条记录封装为一个Map,然后存储到...