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很常用