通用RowMapper封装查询结果到自定义类中
package object;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class ObjectRowMapper implements RowMapper{
private Class className;
public ObjectRowMapper(Class className){
this.className = className;
}
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Object nt = new Object();
Field[] fields = className.getDeclaredFields();
try {
nt = className.newInstance();
for (Field field : fields) {
//如果结果中没有改field项则跳过
try {
rs.findColumn(field.getName());
} catch (Exception e) {
continue;
}
//修改相应filed的权限
boolean accessFlag = field.isAccessible();
field.setAccessible(true);
String value = rs.getString(field.getName());
value = value==null?"":value;
setFieldValue(nt, field, value);
//恢复相应field的权限
field.setAccessible(accessFlag);
}
} catch (Exception e) {
e.printStackTrace();
}
return nt;
}
public static void setFieldValue(Object form, Field field, String value) {
String elemType = field.getType().toString();
if (elemType.indexOf("boolean") != -1||elemType.indexOf("Boolean") != -1) {
try {
field.set(form, Boolean.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("byte") != -1||elemType.indexOf("Byte") != -1) {
try {
field.set(form, Byte.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("char") != -1||elemType.indexOf("Character") != -1) {
try {
field.set(form, Character.valueOf(value.charAt(0)));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("double") != -1||elemType.indexOf("Double") != -1) {
try {
field.set(form, Double.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("float") != -1||elemType.indexOf("Float") != -1) {
try {
field.set(form, Float.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("int") != -1||elemType.indexOf("Integer") != -1) {
try {
field.set(form, Integer.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("long") != -1||elemType.indexOf("Long") != -1) {
try {
field.set(form, Long.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("short") != -1||elemType.indexOf("Short") != -1) {
try {
field.set(form, Short.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
try {
field.set(form, (Object) value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
通用RowMapper封装查询结果到自定义类中的更多相关文章
- 关于在App_Code文件夹自定义类中Session无法使用
由于前台页面需要调用App_Code中自定义类的函数,但在自定义类中找不到Session,解决方法如下: 新建一个类session,并自己定义函数GetSession(),引用命名空间 System. ...
- cocos2dx lua 绑定之一:自动绑定自定义类中的函数
cococs2dx 3.13.1 + vs2013 + win10 1.首先定义C++类Student 在cocos2d-x\cocos文件夹下新建一个user_define的文件夹放置两个文件. 注 ...
- Mongo:将查询结果转换为自定义类
1.自定义类 public class MyClass { public string Name { get; set; } public int Corners { get; set; } } 2. ...
- cocos2dx lua 绑定之二:手动绑定自定义类中的函数
cococs2dx 3.13.1 + vs2013 + win10 1.首先按照<cocos2dx lua 绑定之一:自动绑定自定义类>绑定Student类 2.在Student类中增加一 ...
- spring自定义类中@AutoWired标识的元素注入为null
最近在做项目的时候,发现程序运行的时候有一个nullpointer exception,一脸懵逼因为感觉程序没什么逻辑.后来发现是因为new出来的component不会自动注入它的元素. 现象:@Co ...
- iOS 如何在自定义类中支持 "[]" 运算符
在相应类中实现如下协议即可. 1.字典类 - (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key; - (void)setObj ...
- unity, 自定义类中使用print
在unity脚本中自定义c#类,而且不继承MonoBehaviour的话,若还想在其中使用print函数,可以用MonoBehaviour.print(...).
- SpringBoot在自定义类中调用service层等Spring其他层
解决方案: 1.上代码 @Component public class ServerHandler extends IoHandlerAdapter { @Autowired protected He ...
- 自定义的类型放入STL的set中,需要重载自定义类中的“<”符号(转)
在以前学习STL的时候,曾经学到过,如果要将自定义的类型放入到set中的话,就需要重载“<”符号,原因是set是一个有序的集合,集合会按照“<”比较的大小,默认按照从小到大的顺序排列.假设 ...
随机推荐
- 九度OJ 1356:孩子们的游戏(圆圈中最后剩下的数) (约瑟夫环)
时间限制:10 秒 内存限制:32 兆 特殊判题:否 提交:1333 解决:483 题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深 ...
- S-形函数广泛应用于ANN 的激活函数
Logistic function hyperbolic tangent arctangent function Gudermannian function Error function ...
- 学院名单-211院校研招学院-中国教育在线(www.eol.cn)170915164402
[数据结果] 学校数.学院数:112,2657. [数据来源] 中国教育在线(www.eol.cn)211院校研招学院. http://www.eol.cn/html/ky/gxmd/211.shtm ...
- 【python】-- 模块、os、sys、time/datetime、random、logging、re
模块 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...
- PHP开发环境搭建(转载)
转载自:http://blog.csdn.net/rosetta/article/details/53967215 前言 最近学了n种语言,学每种语言的套路无非就是先搭建一个开发环境,再找本书或者 ...
- SM30维护视图创建【转】
在SAP中,经常需要自定义数据库表.而且可能需要人工维护数据库表中的数据,可以通过SM30进行维护数据:但是SM30事务的权限太大,不适宜将SM30直接分配:因此,可以通过给维护表分配事 ...
- 分布式文件存储——GlusterFS
一.概论 1.简介 GlusterFS (Gluster File System) 是一个开源的分布式文件系统,主要由 Z RESEARCH 公司负责开发. GlusterFS 是 Scale-Out ...
- CAS的实现Atomic类库
atomic 原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为"不可被中断的一个或一系列操作".在多 ...
- IOS蓝牙开发模块
一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的 CoreBluetooth.framework进行统一管理.通过蓝牙进 ...
- Executor中的类
Executor框架 其中ThreadPoolExecutor非常重要,通过这个类自定义线程池 public ThreadPoolExecutor(int corePoolSize, //线程池里面的 ...