JDBC进阶篇

使用连接池的的架构

架构师基础篇--数据库之JDBC进阶篇(下)

dbutils

关于ThreadLocal

ThreadLocal的相关API。

  1. void set(T value) : save value
  2. T get(): get value
  3. 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

架构师基础篇--数据库之JDBC进阶篇(下)

相关文章: