ibatis 高级查询技术

1 映射继承,鉴别器(discriminator),根据某列的值来确定要实例化相关类的类型,与switch语句的工作原理类似,很少用,在ibatis in action里有例子
2 rowHandler是一个接口,当ibatis从数据库里取出数据后,将每条数据形成对象后,可以用这个方法对生成的对象进行处理,相当于给开发人员留下的灵活的接口。

//RowHandle生产XML
//   XmlRowHandler rh=new XmlRowHandler();
//   sqlMap.queryWithRowHandler("getAllUsers", "CN", rh);
//   String xmlDoc=rh.getXmlDocument();   
//  
//   System.out.println(xmlDoc);

 

首先要定义一个实现RowHandler的类,如XmlRowHandler,实现handleRow方法

import com.ibatis.sqlmap.client.event.RowHandler;

public class XmlRowHandler implements RowHandler {
 
 public StringBuffer xmlDocument=new StringBuffer("<UserList>");
 
 public void handleRow(Object o) {
  // TODO Auto-generated method stub
  User acc=(User)o;
  xmlDocument.append("<User>");
  
  xmlDocument.append("<UserID>");
  xmlDocument.append(acc.getUserid());
  xmlDocument.append("</UserID>");
  
  xmlDocument.append("<username>");
  xmlDocument.append(acc.getUsername());
  xmlDocument.append("</username>");
  
  xmlDocument.append("<password>");
  xmlDocument.append(acc.getPassword());
  xmlDocument.append("</password>");
  
  xmlDocument.append("<department>");
  xmlDocument.append(acc.getDepartment());
  xmlDocument.append("</department>"); 
  
  xmlDocument.append("</User>");
 }
//取结果
 public String getXmlDocument() {
  
  xmlDocument.append("</UserList>");

  return xmlDocument.toString();
 }

}

 

queryWithRowHandler调用时指定rowhandler,对 每个对象执行,没有返回值

import java.util.ArrayList;
import java.util.List;

import com.ibatis.sqlmap.client.event.RowHandler;

public class FilterRowHandler implements RowHandler {
 
 public List<User> list=new ArrayList<User>();
 
 public void handleRow(Object o) {
  // TODO Auto-generated method stub
  User user=(User)o;
  
  if("Sale".equals(user.getDepartment()))
   list.add(user); 
  
 }

 public List<User> getList() {
  return list;
 }

}

 

//RowHandler过滤数据

FilterRowHandler fh=new FilterRowHandler();
   sqlMap.queryWithRowHandler("getAllUsers", null, fh);
   List<User> ls=fh.getList();//符合条件的结果 

 
   在实际开发中,rowHandler很常用  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值