1.新建一个RowMapper接口:
2.创建一个回调接口:QueryCallBack
3.创建QueryHelper类
4.创建DatabaseManager
5.创建UserDaoImpl:
DatabaseManager类的executeQuery(final RowMapper rowMapper,String sql,Object[] parameters)方法
是核心,它将RowMapper和CallBack链接起来了。
首先调用QueryHelper类的executeQuery方法可以查询出所有满足查询参数的记录,获得最终的ResultSet.
然后QueryHelper自己并不去将ResultSet中的值组装成User对象,它将这个任务交给QueryCallback去做。
DatabaseManager创建的实现了接口QueryCallback的匿名内部类把上面这个任务担当下来了。但是这只是表面现象。因为它自己也没做事,它还是把数据的组装操作交给了RowMapper.
QueryCallback匿名内部类能访问外部类的final型的RowMapper.
最终还是落到了RowMapper头上。
在UserDaoImpl中,创建一个RowMapper的具体实现,并在创建的同时准备一个东西来装等下组装出来的User对象。所以就有了
new UserMapper(userList)
UserMapper实现的buildRow(ResultSet rs) 方法相当专一。一个rs对应一个User。(我不管外面的世界是怎么地!我就做这样简单的工作,呵呵!)
综上,通过此思路构建的查询操作,各个部分的操作职责分明。
通过此思路的解析,可以构建一个完整的CRUD操作工具集,利用的核心技术还是回调技术。
序列图如下: