自己来实现BeanUtils里的popular方法

前言:

平时在开发学习中,总是习惯用各种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一样坚定不移的去解决,永不言弃~







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值