最近写了一个书城项目,由于使用的是传智播客的教材,不可避免的使用了传智播客的工具包(实际上是懒得写,而且自己也不会打包)所以在这里对工具包进行一个总结,以便于以后的学习。
一。首先是第一个文件夹---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);
}
}
}
代码注释已经很详细不再赘述。