我遵循以下示例:https : //code.google.com/p/mybatis/wiki/ResultHandlerExample 这是我的界面:
public interface CountryDirRdbMapper { public static class CountryDirBaseItemWithText { public CountryDirBaseItem baseItem; } public List<CountryDirBaseItem> select(ResultHandler handler); }
这是我的XML映射器
<resultMap id="readItemsRM" type="CountryDirRdbMapper$CountryDirBaseItemWithText"> <association property="baseItem" javaType="CountryDirBaseItem"> <id property="id" column="Id"/> <result property="comment" column="Comment"/> </association> </resultMap>
这段代码构成了我的DAO:
SqlSession session = MyBatisConnectionFactory.getSqlSessionFactory().openSession(true); List<CountryDirBaseItem> list; try{ CountryDirRdbMapper mapper = session.getMapper(CountryDirRdbMapper.class); class MyResultHandler implements ResultHandler { @Override public void handleResult(ResultContext context) { System.out.println("#########################"); } } MyResultHandler handler=new MyResultHandler(); list= mapper.select(handler); } finally { session.close(); }
但是,永远不会调用结果处理程序。在这个例子中,我跟随人们说有同样的问题。那么如何使其工作呢?还是mybatis 3不支持结果处理程序?
我找到了答案。不幸的是,MyBatis开发人员根本不关心用户。他们真丢人。事实是,当我们使用自定义结果处理程序时,我们必须使用的不是会话而是会话。
MyResultHandler handler=new MyResultHandler(); session.select("select", handler);
之后,必须从处理程序中获取结果。