Teambiz中三种特殊RowMapper的使用
   
   
   
   
   
   
  作者:何杨
  撰写日期:2012年2月25日
  版本:1.00
  更新日期: 
   
   
   
  第一部分:功能说明
  针对特殊目的的查询,TeamBiz提供了一系列的RowMapper类以减轻程序员的劳动。
  第二部分:核心组件
       | 名称 | 路径 | 说明 | 
     | IntegerRowMapper | teambiz\src\com\ibm\heyang\dao\rowmapper\IntegerRowMapper.java | 只需进行数量查询时,如select count(*) from tb,明确只会返回一行一列,这时建议使用这个类。 | 
     | StringRowMapper | teambiz\src\com\ibm\heyang\dao\rowmapper\StringRowMapper.java | 当只查询一列时,如select a from table,建议使用这个类。 | 
     | UserRowMapper | eambiz\src\com\ibm\heyang\dao\rowmapper\UserRowMapper.java | 当需要从JDBCTemplate查询到的链表中取出对象时,建议仿照这个类制作自己的RowMapper类 | 
 
   
  第三部分:各种RowMapper类的具体使用
  1. IntegerRowMapper。
  StringBuilder sb=new StringBuilder();
  sb.append("    select ");
  sb.append("        count(*) as recordcount");
  sb.append("    from teambiz_menu");
  String sql=sb.toString();
  List<?> ls=this.getJdbcTemplate().query(sql, new IntegerRowMapper());
  Integer count=(Integer)(ls.get(0));
  以上代码路径:teambiz\src\com\ibm\heyang\dao\MenuDao.java中isNoMenu函数。
   
  2. StringRowMapper
  StringBuilder sb=new StringBuilder();
  sb.append("    select");
  sb.append("        t01.group_name");
  sb.append("    from");
  sb.append("        sys_group");
  sb.append("        t01,");
  sb.append("        sys_user");
  sb.append("        t02");
  sb.append("    where");
  sb.append("        t01.groupid=t02.groupid");
  sb.append("        and");
  sb.append("        t02.userid="+userid+"");
  String sql=sb.toString();
   
  // 查询
  List<?> ls = this.getJdbcTemplate().query(sql,new StringRowMapper());
  最后得到的ls就是一个包含字符串元素的链表,要取值对其进行遍历即可。
  3. UserRowMapper的使用示例
  StringBuilder sb=new StringBuilder();
  sb.append("    select ");
  sb.append("          ID, ");
  sb.append("          name, ");
  sb.append("          email, ");
  sb.append("          pswd, ");
  sb.append("          groupName, ");
  sb.append("          companyName,");
  sb.append("          level");
  sb.append("    from teambiz_user");
  sb.append("    where name='"+name+"' and ");
  sb.append("          pswd='"+pswd+"' ");
  String sql=sb.toString();
   
  List<?> ls = this.getJdbcTemplate().query(sql, (new UserRowMapper()));
   
  if(ls.size()==1){
              return (User)ls.get(0);
  }else{
              throw new Exception("用户名或密码错误!");
  }
  以上代码路径:teambiz\src\com\ibm\heyang\dao\UserDao.java中的getUserByNamePswd函数。
   
  第四部分:小结
  对数据库进行各种查询是程序员的常见任务之一,如果能适当运用以上类,能减少代码的重复程度及减轻他们的劳动强度。