前言:
平时在开发学习中,总是习惯用各种jar来开发,效率快,简单开发。可是,当代码写来写去感觉就是这样,编程水平一直停滞不前。有些前辈们说:“这些东西早就有人开发出来了,没必要去造轮子!“。这句话本是没错,确实没必要造轮子,但是如果我们想要提高自己,那还必须要学会造轮子。
废话少说,开始学习!
原理其实很简单,就是利用反射将信息映射到对应的属性中!
package com.wen.beanutils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
/**
*
* @ClassName: MyBeanUtile
* @author 文
* @date 2017年10月25日 上午11:46:40
*/
public class MyBeanUtile {
public static <T> Object populate(Object bean, Map map) throws Exception {
Class<T> clazz = (Class<T>) Class.forName(bean.getClass().getName());
// 用反射new出一个对象
T obj = clazz.newInstance();
// 获取出类中所有的变量名字(反射可以无视private这类属性)
Field[] field = clazz.getDeclaredFields();
for (Field fie : field) {
// 找到传入类中的变量名字
String variableName = fie.getName();
// 获取传入进来的map中相关键对应的值
T[] value = (T[]) map.get(variableName);
if (value == null) {
System.out.println(variableName + "的值为空。请注意您的前后端变量名字是否一致!");
continue;
} else {
// 根据java中set方法的原则,拼接方法名。
String MethodName = "set"
+ variableName.substring(0, 1).toUpperCase()
+ variableName.substring(1);
// 先new一个class对象,指定为?是为了更好适应各种参数类型
Class<?> variableType[] = new Class[1];
// 获取参数类型
variableType[0] = fie.getType();
// 用类来获取该方法,准备
Method method = clazz.getDeclaredMethod(MethodName,
variableType);
// 判断类型转换
TypeTransformation(obj, value, method);
}
}
return obj;
}
//类型进行转换,拆箱装箱
private static <T> void TypeTransformation(T obj, T[] value, Method method)
throws IllegalAccessException, InvocationTargetException {
String text = method.toString();
if (text.contains(".Integer")) {
String a = (String) value[0];
Integer c = Integer.parseInt(a);
Integer[] f = new Integer[1];
f[0] = c;
method.invoke(obj, c);
} else if (text.contains("int")) {
String a = (String) value[0];
int c = Integer.parseInt(a);
method.invoke(obj, c);
} else if (text.contains("double")) {
String a = (String) value[0];
double c = Double.parseDouble(a);
method.invoke(obj, c);
} else if (text.contains("float")) {
String a = (String) value[0];
float c = Float.parseFloat(a);
method.invoke(obj, c);
} else if (text.contains(".Double")) {
String a = (String) value[0];
Double c = Double.parseDouble(a);
Double[] f = new Double[1];
f[0] = c;
method.invoke(obj, f);
} else if (text.contains(".Float")) {
String a = (String) value[0];
Float c = Float.parseFloat(a);
Float[] f = new Float[1];
f[0] = c;
method.invoke(obj, f);
} else {
method.invoke(obj, value);
}
}
}
OK大功告成,接下来我们进行一下操作,看能否通过~
1、先准备一个javabean类
2、准备一个模拟注册的jsp页面
3、写一个处理请求的servlet
接下来就开始模拟注册操作了!
点击提交后,在数据库可以看到相关信息
以上操作,主要分为以下几个步骤:
第一步,小编写的是User对象。
第二步,调用MyBeanUtils中的populat方法,方法第一个传的是您要封装的bean对象,第二个是一个Map集合(键值对)。
Request.getparameterMap();就是接收我前面表单中提交数据并形成的键值对
第三步,创建MyDbUtils对象,放入数据源对象或者是连接Connection对象
第四步,就是写SQL语句啦。
第五步,就是获取user对象中的值。
OK,大功告成。简单注册就5行代码做完啦!
这个和小编之前发的MyDBUtils相结合了。如果看的不太明白的同学,
可以先看MyDBUtils,后再来看这一篇,相信大家可以很快明白!
总结:
小编学的还尚浅显,代码写的不好,也不太规范,欢迎各位大佬批评指教~谢谢!
如果有不懂的同学,欢迎私信或者留言。小编将尽力帮您解答~
程序猿名言:
对待女孩要像对待BUG一样坚定不移的去解决,永不言弃~