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