利用反射实现JavaBean的自动赋值
最近开发公司的一个项目,因项目不是很大的项目,所以仅仅采用了spring MVC框架,但是数据库很多表中的字段至少15个,这样当每次将数据库表中的数据取出来放入javabean中时,写setXXX方法总是要写很多遍,而且容易出错,很是麻烦,所以采用了反射和泛型的方式,自动给javabean赋值。当然有个缺点,就是数据库中的字段名要跟javabean中的字段名相同,并且字段类型要相同。如果想做成更好的话,可以采用配置文件的方式,在此就不写了。代码如下:
// 根据传过来的对象和ResultSet自动给对象赋值
public static <T> List<T> getBean(ResultSet rs, T object) throws Exception {
Class<?> classType = object.getClass();
ArrayList<T> objList = new ArrayList<T>();
//SqlRowSet srs = jdbcTemplate.queryForRowSet(sql);
Field[] fields = classType.getDeclaredFields();//得到对象中的字段
while (rs.next()) {
//每次循环时,重新实例化一个与传过来的对象类型一样的对象
T objectCopy = (T) classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
Object value = null;
//根据字段类型决定结果集中使用哪种get方法从数据中取到数据
if (field.getType().equals(String.class)) {
value = rs.getString(fieldName);
if(value==null){
value="";
}
}
if (field.getType().equals(int.class)) {
value = rs.getInt(fieldName);
}
if (field.getType().equals(java.util.Date.class)) {
value = rs.getDate(fieldName);
}
// 获得属性的首字母并转换为大写,与setXXX对应
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setMethodName = "set" + firstLetter
+ fieldName.substring(1);
Method setMethod = classType.getMethod(setMethodName,
new Class[] { field.getType() });
setMethod.invoke(objectCopy, new Object[] { value });//调用对象的setXXX方法
}
objList.add(objectCopy);
}
if(rs != null){
rs.close();
}
return objList;
}
上面方法的使用如类为User:
User user = new User();
List<User> list = getgetBean(resultSet , user);//将得到list集合,里面是有user对象组成的。
利用反射实现JavaBean的自动赋值的更多相关文章
- 利用反射给JAVABEAN实例赋值
为简化和统一,需要给javabean实例统一赋值,实现代码如下(已测试) import java.util.ArrayList; import java.util.Date; import java. ...
- 【转】利用反射快速给Model实体赋值
原文地址:http://blog.csdn.net/gxiangzi/article/details/8629064 试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有 ...
- 利用反射快速给Model实体赋值
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...
- 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...
- javabean对象自动赋值给另一个javabean对象
方法1:把JavaBean的from的值自动set给to,省略了自己从from中get然后再set给to import java.beans.BeanInfo;import java.beans.In ...
- C# 利用反射动态给模型Model 赋值
https://www.cnblogs.com/waitingfor/articles/2220669.html object ff = Activator.CreateInstance(tt, nu ...
- Java——利用反射机制将表单数据自动填充到JavaBean中
以一个案例介绍反射机制的一种常见的使用场景,以及具体实现. 1.本文案例 在编写Java Web应用程序时,使用表单提交数据是一个必不可少的环节,后台对于前台使用表单提交的数据需要能够从请求中解析,并 ...
- 利用反射把DataTable自动赋值到Model实体(自动识别数据类型)
转:http://www.cnblogs.com/the7stroke/archive/2012/04/22/2465591.html using System.Collections.Generic ...
- 反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值
一.准备知识: Java反射机制 处理事务的JavaBean String的操作常用方法 二.模拟步骤 这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值. 1.首先创建 ...
随机推荐
- hdu 1711
读入优化有3s多. #include <cstdio> #include <cctype> #define maxn 1000010 #define maxm 10010 in ...
- poj 2104 静态主席树
我的第一道主席树(静态). 先记下自己对主席树的理解: 主席树的作用是用于查询区间第k大的元素(初始化nlog(n),查询log(n)) 主席树=可持续线段树+前缀和思想 主席树实际上是n棵线段树(由 ...
- Centos7 下mysql大小写敏感问题
在Centos7 下mysql大小写敏感问题,会导致程序运行时找不到对应的表. 解决办法: 第一步:编辑/etc/my.cnf文件,在[mysqld]节下 添加 lower_case_table_na ...
- PAT甲级1010. Radix
PAT甲级1010. Radix (25) 题意: 给定一对正整数,例如6和110,这个等式6 = 110可以是真的吗?答案是"是",如果6是十进制数,110是二进制数. 现在对于 ...
- Linux知识(5)----LINUX下GDB调试
命令 解释 示例 file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample r c Run的简 ...
- linux基础命令学习 (八)磁盘空间
一.df linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.于du不同的是,du是面向文件的命令,只计算被文件占用的空间.不计算文件系统metadata 占用的空间.d ...
- Eclipse打开.class文件
1.准备材料 jad.exe 下载地址 https://varaneckas.com/jad/,根据系统去选择(就当是废话) 下载下来的是jad158g.win.zip压缩文件,解压后有个j ...
- Windows 10 UWP程序标题栏设置
在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序 ...
- CMSIS-SVD Example (Schema Version 1.1)
<?xml version="1.0" encoding="utf-8"?> <!-- File naming: <vendor> ...
- u3d移动游戏优化规范
1.顶点性能一般来说,如果您想在iPhone 3GS或更新的设备上每帧渲染不超过40,000可见点,那么对于一些配备 MBX GPU的旧设备(比如,原始的 iPhone,如 iPhone 3g和 iP ...