欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javaEE(DBUtils和ThreadLocal)

程序员文章站 2022-06-23 19:38:48
...

DBUtils

apache公司做的,是java编程中数据库操作的实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作
1.对数据表的读操作,他可以把结果转换成List,Array,Set等
2.对数据表的写操作(只需要sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能,

DBUtils三个核心对象
QueryRunner类(增删改查)
query() 执行select
update() 执行insert update delete
batch() 批处理
ResultSetHandler接口(处理结果封装)
用于定义select操作后,怎样定义结果集
DBUtils类(针对close,事务操作等)
它就是个工具类,定义关闭资源与事务处理的方法


DBUtils使用步骤
1.添加commons-dbutils.jar包(如果使用连接池可以加上c3p0.jar)
2.查询(QUeryRunner(dateSource,true)代表oracle使用)
低级
	QueryRunner qr=new QueryRunner("需要数据源,不是Connection");
	qr.query("select * from XXX",new ResultSetHandler() {
		//当query方法执行select语句后,将结果集以参数的形式传递过来
		public ArrayList<User> handle(ResultSet rs) throws SQLException {
			ArrayList<User> list = new ArrayList<User>();
			while(rs.next()) {
				User u=new User();
				u.setId(rs.getInt(1));
				list.add(u);
			}
			return list;
		}
	});
中级(ResultSetHandler有实现类,其中有Bea)
	QueryRunner qr=new QueryRunner("需要数据源,不是Connection");
	List<User> query = qr.query("select * from XXX",new BeanListHandler<User>(User.class));
三个参数的query是
qr.query("select * from XXX where id=? and name=?",new BeanListHandler<User>(User.class),1,"小明");

ThreadLocal

模拟ThreadLocal的设计。(使用目的:业务层需要开启事务,但是连接不是同一个连接,所以用需要同一个connection)

	public class ThreadLocal{
	private Map<Runnable,Object> container = newHashMap<Runnable,Object>();
	public void set(Object value){
	container.put(Thread.currentThread(),value);//用当前线程作为key
	}
	public Object get(){
	return container.get(Thread.currentThread());
	}
	public void remove(){
	container.remove(Thread.currentThread());
	}
	}

总结:调用该类的get方法,永远返回当前线程放入的数据。线程局部变量。