JDBC进阶篇
使用连接池的的架构
dbutils
关于ThreadLocal
ThreadLocal的相关API。
- void set(T value) : save value
- T get(): get value
- void remove() : remove value
ThreadLocal的实现原理
ThreadLocal 内部维护的是一个Map, Map的键是当前线程的线程ID。
dbutils结构
commons-dbutils是一个方数据库操作的jar包,下面来分析一下它的结构。
update方法:
int update(String sql, Object… params)
–>执行增删改语句
int update(Connection con, String sql, Object… params)–>调用者提供Connection,为了事务能够使用同一个connection.
query方法:
T query(String sql, ResultSetHandler rsh, Object … params)
–>执行查询, 先得到ResultSet, 然后调用rsh的handler()把rs 转换为需要的类型
T query(Connection con,String sql, ResultSetHandler rsh, Object … params)用来支持事务
ResultSetHandler 接口
-
BeanHandler(单行) -->构造器需要一个Class类型的参数,用来把一行结果转换成指定类型的javaBean对象
-
BeanListHandler(多行)–>构造器也需要一个Class类型的参数,用来把一行结果集转行成一个javabean,那么多行就是转换成List对象。
-
MapHandler(单行) --> 把一行结果集转换为Map对象
一行记录,一个Map -
MapListHandler(多行) --> 把一行记录转换成一个Map,多行就是多个Map,即List
-
ScalarHandler(单行单列) -->通常用于select count(*) from table语句,结果集是单行单列的,这个方法返回的是一个
分页
什么是分页
例如一个网页,
首页 上一页 1 2 3 4 5 6 下一页 尾页
分页的优点:只查询一页,不用查询所有页
分页数据
页面的数据都是有Servlet传递来的。
servlet:
- 当前页: pagecode, pc;
- pc:如果页面没有传递当前页码,那么Servlet默认是第一页,或者按页面传递的为准。
- 总页数: totalPages, tp;
- tp: 总记录数/每页记录数
- 总记录数: totalRecord, tr;
- tr:dao来获取 select count(*) from t_customer;
- 每页记录数: 业务数据或者系统数据!
- 当前页数据: beanList
- url
分页在各层中的处理
- 页面:给出分页相关的链接们
- 页面需要给Servlet传递当前页码
- Servlet:创建Paging对象,给PageBean所有属性赋值,然后传递给页面
- Servlet需要给DAO传递pc,ps
- Service:跳过
- dao:
- tr: select count(*)…
- beanlist: select * from t_customer limit x,y