项目中对template-callback的探索

说明:以下代码仅为说明template-callback模型,对代码进行了部分删减.

下面两个方法是调用template-callback模型

/** * 根据个人身份证号码和姓名查询当年失业缴费记录 * * @param key * 个人关键信息 * @return ShiyePayLog 当年失业缴费记录 */ public ShiyePayLog reportPersonShiyePayLog(PersonKey key) { Object returnObj = makeReportData(key, new DefaultPayLogDataCallback() { // 这是一个匿名类,实现了DefaultPayLogDataCallback类未实现的两个方法 public void setItems(String deptId, String personlyId, Map items) { setReportPersonShiyePayLogItems(deptId, personlyId, (LinkedHashMap<Integer, List<ShiyePayLogItem>>) items); } public Object getRerportData() { return new ShiyePayLog(); } }); return (ShiyePayLog) returnObj; }

上面描述的UML图,也就是template-callback模型的最终实现类ReportDataMapper在这里被调用

/** * 通过KEY和CALLBACK完成工伤、失业、生育的查询 */ private Object makeReportData(PersonKey key, ReportDataCallback callback) { // 在下面调用ReportDataMapper类 List list = this.getJdbcTemplate().query(sql, param.toArray(),new ReportDataMapper(callback)); return CommonUtil.isNullOrSizeZero(list) ? null : list.get(0); }

对接口ReportDataCallback的描述

public interface ReportDataCallback { void setPojoProperty(Object pojo, ResultSet rs) throws SQLException;//更具参数对象POJO和结果集RS设置对象属性值 Object getRerportData();//得到工伤、失业、生育的对象 Map getItemMap(Object pojo);//按月份把设置工伤、失业、生育相对应的LinkedHashMap初始化 void setItems(String deptId, String personlyId, Map items);//设置工伤、失业、生育相应的PayLogItems }

对抽象类DefaultPayLogDataCallback的描述

本类已经实现了接口ReportDataCallback的两个方法

/** * ReportDataCallback回调接口的实现方法<br> * 实现getItemMap(Object * pojo)方法按月份把设置工伤、失业、生育相对应的LinkedHashMap初始化,并把相应的pojo中的items属性设置值 * 实现setPojoProperty()方法根据参数对象POJO和结果集RS设置对象属性值 */ abstract public class DefaultPayLogDataCallback implements ReportDataCallback { private Logger logger = Logger.getLogger(getClass()); @SuppressWarnings("unchecked") public Map getItemMap(Object pojo) { LinkedHashMap items = new LinkedHashMap(); for (int i = 1; i <= 12; i++) {// 按月份把设置工伤、失业、生育相对应的LinkedHashMap初始化 items.put(i, new ArrayList()); } try { BeanUtils.setProperty(pojo, "items", items);// 设置相应的pojo中的items属性值 } catch (IllegalAccessException e) { logger.error(e); } catch (InvocationTargetException e) { logger.error(e); } return items; } public void setPojoProperty(Object pojo, ResultSet rs) throws SQLException {//根据参数对象POJO和结果集RS设置对象属性值 try { BeanUtils.setProperty(pojo, "zzjgdma", rs.getString("ZZJGDMA"));// 组织机构代码 BeanUtils.setProperty(pojo, "dwmcheng", rs.getString("DWMCHENG"));// 单位名称 BeanUtils.setProperty(pojo, "xming", rs.getString("XMING"));// 姓名 BeanUtils.setProperty(pojo, "gmsfzhma", rs.getString("GMSFZHMA"));// 公民身份证号码 } catch (IllegalAccessException e) { logger.error(e); } catch (InvocationTargetException e) { logger.error(e); } } }

下面类是template-callback模型最核心的类,将接口ReportDataCallback组合到本类中

public class ReportDataMapper implements RowMapper { ReportDataCallback callback; public ReportDataMapper(ReportDataCallback callback) { super(); this.callback = callback; } public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Object pojo = callback.getRerportData();//得到相应的工伤、失业、生育对象 Map items = callback.getItemMap(pojo);//按月份把设置工伤、失业、生育相对应的LinkedHashMap初始化 callback.setPojoProperty(pojo, rs);//更具参数对象POJO和结果集RS设置对象属性值 callback.setItems(rs.getString("QYID"), rs.getString("GRID"), items);//设置工伤、失业、生育相应的PayLogItems return pojo; } }

下面是对上面方法数据结构的描述

public class ShiyePayLog implements java.io.Serializable{ String zzjgdma;//组织机构代码 String dwmcheng;//单位名称 String xming;//姓名 String gmsfzhma;//公民身份证号码 LinkedHashMap<Integer, List<ShiyePayLogItem>> items; public String getZzjgdma() { return zzjgdma; } public void setZzjgdma(String zzjgdma) { this.zzjgdma = zzjgdma; } ................. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值