JAVA开发工具类

JAVA开发工具类

工具类:

package com.ppl.commons;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

/**
 * 小小工具
 * @author pplsunny
 * @version 1.0
 *
 */
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);
		}
	}
}

package com.ppl.commons;

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

import org.apache.commons.beanutils.Converter;

/**
 * 把String转换成java.util.Date的类型转换器
 * @author pplsunny
 * @version 1.0
 *
 */
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 hh:mm:ss");
		try {
			return sdf.parse(val);
		} catch (ParseException e) {
			throw new RuntimeException(e);
		}
	}
}

测试代码:

	@Test
	public void test1(){
		
		Map<String,String> map=new HashMap<String,String>();
		map.put("sname", "ppl");
		map.put("age", "18");
		map.put("birthday", "2016-12-06 10:20:30");
		Student stu=CommonUtils.toBean(map, Student.class);
		System.out.println(stu);
		//Student [sid=null, sname=ppl, age=18, gender=null, birthday=Tue Dec 06 10:20:30 CST 2016]
	}

package com.ppl.test;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import cn.itcast.commons.CommonUtils;
import cn.itcast.jdbc.JdbcUtils;
import cn.itcast.jdbc.TxQueryRunner;

/**
 * TxQueryRunner它是QueryRunner的子类!(commons-dbutils.jar)
 *   可用起来与QueryRunner相似的!
 *   我们的类支持事务!它底层使用了JdbcUtils来获取连接!
 *   
 * 简化jdbc的操作
 * QueryRunner的三个方法:
 * * update() --> insert、update、delete
 * * query() --> select
 * * batch() --> 批处理
 * @author ppl
 *
 */
public class TxQueryRunnerTest {
	/**
	 * 测试update()方法,用来执行insert、update、delete语句
	 * @throws SQLException
	 */
	@Test
	public void testUpdate() throws SQLException {
		String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";
		Object[] params = {"1", "p1", 1, "男"};//给sql中对应的参数
		
		QueryRunner qr = new TxQueryRunner();//我们没有给对象提供连接池
		qr.update(sql, params);//执行sql,也不提供连接,它内部会使用JdbcUtils来获取连接
	}
	
	/**
	 * 使用事务
	 * @throws SQLException
	 */
	@Test
	public void testUpdate2() throws Exception {
		try {
			JdbcUtils.beginTransaction();//开启事务
			
			String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";
			QueryRunner qr = new TxQueryRunner();
			Object[] params = {"2", "p2", 2, "女"};
			qr.update(sql, params);//执行
			
			if(false) {
				throw new Exception();
			}
			
			params = new Object[]{"3", "p3", 3, "女"};
			qr.update(sql, params);//执行			
			
			JdbcUtils.commitTransaction();//提交事务
		} catch(Exception e) {
			try {
				JdbcUtils.rollbackTransaction();//回滚事务
			} catch (SQLException e1) {
			}
			throw e;
		}		
	}
	
	/**
	 * 测试查询方法
	 *   我们知道JDBC查询的结果的是ResultSet
	 *   而QueryRunner查询的结果是通过ResultSet映射后的数据。
	 *     * QueryRunner第一步是执行select,得到ResultSet
	 *     * 把ResultSet转换成其他类型的!
	 *   通过转换结果:
	 *      * javaBean:把结果集封装到javaBean中
	 *      * Map:把结果集封装到Map中
	 *      * 把结果集封装到Object中(结果集是单行单列)
	 * @throws SQLException 
	 *      
	 *  
	 */
	/*
	 * 单行结果集映射到javaBean中
	 */
	@Test
	public void testQuery1() throws SQLException {
		String sql = "select * from t_person where pid=?";
		QueryRunner qr = new TxQueryRunner();
		/*
		 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
		 * 
		 * BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中
		 */
		Person p = qr.query(sql, new BeanHandler<Person>(Person.class), "1");
		System.out.println(p);
	}
	
	/**
	 * 使用BeanListHandler
	 *   把多行结果集映射到List<Bean>,即多个JavaBean对象。
	 *   一行结果集记录对应一个javaBean对象,多行就对应List<Bean>
	 * @throws SQLException
	 */
	@Test
	public void testQuery2() throws SQLException {
		String sql = "select * from t_person";
		QueryRunner qr = new TxQueryRunner();
		/*
		 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
		 * 
		 * BeanListHandler --> 它是ResultSetHandler的实现类,
		 *   它的作用是把结果集封装到List<Person>对象中
		 */
		List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
		System.out.println(list);
	}
	
	/**
	 * 使用MapHandler,把单行结果集封装到Map对象中
	 * @throws SQLException
	 */
	@Test
	public void testQuery3() throws SQLException {
		String sql = "select * from t_person where pid=?";
		QueryRunner qr = new TxQueryRunner();
		/*
		 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
		 * 
		 * BeanListHandler --> 它是ResultSetHandler的实现类,
		 *   它的作用是把结果集封装到List<Person>对象中
		 */
		Map<String, Object> map = qr.query(sql, new MapHandler(), "1");
		System.out.println(map);
	}
	
	/**
	 * 使用MapListHandler,把多行结果集封装到List<Map>中,即多个Map
	 *   一行对应一个Map,多行对应List<Map>
	 * @throws SQLException
	 */
	@Test
	public void testQuery4() throws SQLException {
		String sql = "select * from t_person";
		QueryRunner qr = new TxQueryRunner();
		/*
		 * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
		 * 
		 * BeanListHandler --> 它是ResultSetHandler的实现类,
		 *   它的作用是把结果集封装到List<Person>对象中
		 */
		List<Map<String, Object>> mapList = qr.query(sql, new MapListHandler());
		System.out.println(mapList);
	}
	
	/**
	 * 使用ScalarHandler,把单行单列的结果集封装到Object中
	 * @throws SQLException
	 */
	@Test
	public void testQuery5() throws SQLException {
		String sql = "select count(*) from t_person";//结果集是单行单列的
		QueryRunner qr = new TxQueryRunner();

		Object obj = qr.query(sql, new ScalarHandler());
		/*
		 * 我们知道select count(1),结果一定是个整数!
		 * > Integer
		 * > Long
		 * > BigInteger
		 * 
		 * 不同的驱动,结果不同!
		 * 无论是哪种类型,它都是Number类型!强转成Number一定不出错
		 */
		Number number = (Number)obj;
		long cnt = number.longValue();
		System.out.println(cnt);
	}
	
	/**
	 * 一行结果集中包含了两张表的列
	 * 使用MapHandler来处理
	 * 1. 把结果集封装到map中
	 * 2. 使用map生成Person对象
	 * 3. 使用map生成address对象
	 * 4. 把两个实体对象建立关系
	 * @throws SQLException
	 */
	@Test
	public void testQuery6() throws SQLException {
		String sql = "SELECT * FROM t_person p, t_address a WHERE p.aid=a.aid AND p.pid=?";
		QueryRunner qr = new TxQueryRunner();
		/*
		 * 1. 得到Map
		 */
		Map map = qr.query(sql, new MapHandler(), "aaa");
		/*
		 * 2. 把Map中部分数据封装到Person中
		 */
		Person p = CommonUtils.toBean(map, Person.class);
		/*
		 * 3. 把Map中部分数据封装到Address中
		 */
		Address addr = CommonUtils.toBean(map, Address.class);
		/*
		 * 4. 建立两个实体的关系
		 */
		p.setAddress(addr);
		
		System.out.println(p);
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值