import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.ResultSetMetaData; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.sql.rowset.CachedRowSet; public class BeanUtil { private static Logger LOG = Logger.getLogger(Logger.class.getName()); /** * 通过Bean对象获取查询语句 * * @param obj 对象 * @param tableName 表名 * @return SQL */ public static String getSQLOfSelect(Object obj, String tableName) { StringBuffer strBuffer = new StringBuffer("SELECT "); Class<? extends Object> objClass = obj.getClass(); Field fields[] = objClass.getDeclaredFields(); for (Field field : fields) { String methodName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); try { if (null != objClass.getMethod("get" + methodName)) { strBuffer.append(field.getName() + ","); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } strBuffer.delete(strBuffer.length() - 1, strBuffer.length()); strBuffer.append(" FROM " + tableName); LOG.info(strBuffer.toString()); return null; } /** * 通过bean对象获取插入时的SQL * * @param obj java对象 * @param tableName 表名 * @return SQL */ public static String getSQLOfInsert(Object obj, String tableName) { String strSQL = new String("INSERT INTO " + tableName + "(#COLS) VALUES (#VALS)"); Class<? extends Object> objClass = obj.getClass(); Field fields[] = objClass.getDeclaredFields(); StringBuffer cols = new StringBuffer(""); StringBuffer values = new StringBuffer(""); for (Field field : fields) { String methodName = "get" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); try { Method method = objClass.getMethod(methodName); Object o = method.invoke(obj); if (null != o) { cols.append(field.getName() + ","); if (o instanceof Integer || o instanceof Long || o instanceof Double) { values.append(o.toString() + ","); } else if (o instanceof String) { values.append("'" + o + "',"); } else if (o instanceof java.util.Date) { String datestr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((java.util.Date) o); values.append("'" + datestr + "',"); } else { values.append("'" + o.toString() + "',"); } } } catch (SecurityException e) { e.printStackTrace(); continue; } catch (NoSuchMethodException e) { e.printStackTrace(); continue; } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } if (cols.length() > 1 && values.length() > 1) { cols.delete(cols.length() - 1, cols.length()); values.delete(values.length() - 1, values.length()); strSQL = strSQL.replace("#COLS", cols).replace("#VALS", values); } else { LOG.warning("警告:空对象无法完成操作啊"); return null; } LOG.info(strSQL); return strSQL; } /** * 通过缓存结果集构造对象列表 * * @param clazz javaBean类 * @param crs 缓存结果集 * @return 对象列表 */ public static List<Object> getBeanFormCacheRowSet(Class<?> clazz, CachedRowSet crs) { List<Object> result = new ArrayList<Object>(); try { ResultSetMetaData md = crs.getMetaData(); int columnCount = md.getColumnCount(); Object o = null; while (crs.next()) { o = clazz.newInstance(); for (int i = 1; i <= columnCount; i++) { if (crs.getObject(i) == null) { continue; } md.getColumnType(i); String className = md.getColumnClassName(i); if ("java.sql.Timestamp".equals(className) || "java.sql.Date".equals(className)) { className = "java.util.Date"; } else if ("java.sql.Time".equals(className)) { className = "java.lang.String"; } else if ("java.lang.Byte".equals(className) || "java.lang.Short".equals(className)) { className = "java.lang.Integer"; } String methodName = "set" + md.getColumnName(i).substring(0, 1).toUpperCase() + md.getColumnName(i).substring(1); try { clazz.getMethod(methodName, Class.forName(className)).invoke(o, crs.getObject(i)); } catch (NoSuchMethodException e) { LOG.warning("特殊类型字段导致表字段与JavaBean属性不对应!没有找到参数类型是[" + className + "]的SETER方法:" + methodName); continue; } // System.out.println("className : " + className +" \tmethodName : " + methodName); } result.add(o); } } catch (Exception e) { e.printStackTrace(); } return result; } }
相关推荐
`JavaBean`是一种符合特定规范的类,通常用来封装数据,而`Map`则是一种键值对的集合,两者在实际应用中有各自的适用范围。本文将深入探讨如何通过反射机制实现`Map`和`JavaBean`的相互转换。 首先,我们要理解`...
在Java开发中,JavaBean是一种遵循特定规范的Java类,通常用于封装数据并提供相应的getter和setter方法。在数据库操作中,将SQL查询结果映射到Java对象是常见的需求,这时JavaBean的作用就显现出来了。...
【jsp+javabean+access管理系统】是一种基于Web的简易信息管理系统实现,它结合了JavaServer Pages(JSP)、JavaBeans以及Microsoft Access数据库技术。这个系统设计的目标是为用户提供一个直观、易用的界面,通过...
而JavaBean是一种符合特定规范的Java类,通常用于封装数据,便于数据的传输和操作。当我们从数据库查询数据后,有时需要将ResultSet中的数据转化为JavaBean对象,以便在业务逻辑中更方便地使用。本文将详细介绍如何...
MVC模式是一种流行的设计模式,它的主要目标是将应用的业务逻辑、用户界面和数据存储分离开来,提高代码的可维护性和可扩展性。通过这种方式,开发者可以独立地修改各个部分,而不会影响到整个系统的稳定性。 ...
再者,JavaBean是Java中的一种可重用组件,通常用来封装数据和业务逻辑。在本系统中,可以创建一个名为"Student"的JavaBean类,包含学生的基本属性(如姓名、学号、班级等)以及相应的getter和setter方法。JavaBean...
JavaBean是一种符合特定规范的Java类,通常用于封装数据和业务逻辑。在本项目中,JavaBean可以作为数据模型,存储商品信息、用户信息等数据,也可以包含一些简单的业务方法。它们可以被JSP和Servlet通过Java反射...
JSP是Java的一种视图技术,它允许开发者在HTML或XML文档中嵌入Java代码,用来动态生成网页内容。JSP页面会被服务器转换成Servlet执行,因此它结合了HTML的易读性和Java的可编程性。在会议管理系统中,JSP通常用于...
本篇文章将详细讲解如何利用Java的反射机制封装一个名为DBUtil的工具类,以实现对MySQL数据库的万能增删改查功能。 首先,我们来看“反射”这一概念。反射是Java语言的一个强大特性,它允许运行中的Java程序对自身...
22. JavaBean:JavaBean 是 Java 中的一种组件模型,用于封装数据和行为。 23. 图形元件:图形元件是指在图形系统中的基本组成部分,如 Point、Line、Rectangle、Triangle 等。 事务控制和事件委托机制 24. 事务...
数据库触发器是一种存储在数据库中的特殊类型的过程,当对特定表的数据进行修改(如INSERT、UPDATE、DELETE)时自动执行。触发器可以用于实施复杂的业务逻辑、数据完整性检查或审计记录。触发器的定义通常包含触发...
JavaBean是一种遵循特定规范的Java类,通常用于封装数据和业务逻辑。在本系统中,JavaBean扮演了模型角色,负责存储和管理数据。它们可以被JSP页面通过Java的反射机制实例化和调用方法,实现了前后端的数据交换。 ...
SORM框架旨在提供一种简单而高效的方式来实现对象与SQL之间的自动映射。相较于流行的ORM框架如Hibernate,SORM框架力求简化设计,去掉了一些复杂的特性,专注于核心功能。通过这种方式,开发者能够更加容易地上手并...
JavaBean符合一定的规范,通常是封装好的Java类,具有属性、方法和事件,可以被JSP或其他Java应用通过反射机制来调用和操作。 在JSP中,JavaBean可以作为数据模型,存储和处理业务数据。它们可以被嵌入到JSP页面中...
BeanUtils是Apache Commons BeanUtils库的一部分,它提供了一种简单的方式来操作JavaBean的属性,如`BeanUtils.populate(obj, args)`,可以将属性值批量设置到对象中。 数据库的元数据(Metadata)在Java中可以通过...
JavaBean是一种遵循特定编程约定的Java类,通常用于封装数据或者业务逻辑。它们可以通过getter和setter方法来访问私有成员变量,并且可以通过构造函数和其他公共方法来控制其行为。JavaBean常被用作组件模型中的数据...
1. **Java**: Java是一种面向对象的编程语言,其特性包括跨平台(通过Java虚拟机JVM实现)、垃圾回收、自动内存管理以及丰富的类库。Java分为三个版本:J2ME(Java Micro Edition)用于嵌入式设备,J2SE(Java ...
Struts框架是MVC模式的一种实现,主要负责处理请求和控制流程。在描述中提到了以下几点: 1. `params`拦截器:用于将请求参数封装到Action对象中。 2. 类型转换:自动将请求参数转换为Action对象的属性类型。 3. ...
JSP则是一种用于创建动态网页的服务器端脚本语言,它可以嵌入Java代码,将业务逻辑与表现层分离。 5. **项目开发**:实习生参与开发了一个个人日记网站,涉及用户登录注册、日志撰写和发布等功能。项目中使用了...
Struts提供了一种结构化的方式来组织JSP、Servlet和JavaBean,使代码更清晰,易于维护,促进了MVC设计模式的实施。 **Struts的验证框架** Struts的validate()方法在ActionForm中定义,用于验证用户输入。若验证失败...