javaEE(DBUtils和ThreadLocal)

来源:互联网 发布:网络摄像头远程监控软件下载 编辑:程序博客网 时间:2024/06/01 08:52

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方法,永远返回当前线程放入的数据。线程局部变量。