关于itcast-tools工具包的详解(一. commons)

      最近写了一个书城项目,由于使用的是传智播客的教材,不可避免的使用了传智播客的工具包(实际上是懒得写,而且自己也不会打包)所以在这里对工具包进行一个总结,以便于以后的学习。

一。首先是第一个文件夹---commons

该文件夹下有两个工具类一个是CommonUtils类,另一个是DateConverter类;

1.CommonUtils

public class CommonUtils {
	/**
	 * 返回一个不重复的字符串
	 * @return
	 */
	public static String uuid() {
		return UUID.randomUUID().toString().replace("-", "").toUpperCase();
	}

	/**
	 * 把map转换成对象
	 * @param map
	 * @param clazz
	 * @return
	 * 
	 * 把Map转换成指定类型
	 */
	@SuppressWarnings("rawtypes")
	public static <T> T toBean(Map map, Class<T> clazz) {
		try {
			/*
			 * 1. 通过参数clazz创建实例
			 * 2. 使用BeanUtils.populate把map的数据封闭到bean中
			 */
			T bean = clazz.newInstance();
			ConvertUtils.register(new DateConverter(), java.util.Date.class);
			BeanUtils.populate(bean, map);
			return bean;
		} catch(Exception e) {
			throw new RuntimeException(e);
		}
	}
}

    该类一共有两个方法,uuid()和toBean()方法;

   uuid()用于生成一个不重复的字符串,以下是引用部分

UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的形式。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。

toBean()是把map对象转化为指定类型,在项目中一般这样使用:

User form = CommonUtils.toBean(request.getParameterMap(),User.class);(此处用于封装表单数据)

clazz.newInstance();用来创建一个实例,弱类型,效率低;

在使用Bean对象接收数据时,其中populate、copyProperties方法可以正常使用,但date数据类型会出现异常,不支持java.util.Date类型,所以使用ConvertUtils.register进行转换处理,转换成string类型;

BeanUtils.populate();一次为多个属性赋值。

2.DateConverter

     该方法用于转换数据类型;

package cn.itcast.commons;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.commons.beanutils.Converter;

/**
 * 把String转换成java.util.Date的类型转换器
 * @author qdmmy6
 *
 */
public class DateConverter implements Converter {

	@SuppressWarnings("rawtypes")
	@Override
	public Object convert(Class type, Object value) {
		if(value == null) return null;//如果要转换成值为null,那么直接返回null
		if(!(value instanceof String)) {//如果要转换的值不是String,那么就不转换了,直接返回
			return value;
		}
		String val = (String) value;//把值转换成String
		
		// 使用SimpleDateFormat进行转换
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义字符串模板
		try {
			return sdf.parse(val);//开始转换
		} catch (ParseException e) {
			throw new RuntimeException(e);
		}
	}
}

代码注释已经很详细不再赘述。

猜你喜欢

转载自blog.csdn.net/g666m666d666/article/details/89278620