Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MyBatis-ResultHandler未被调用_Java_Sql_Mybatis - Fatal编程技术网

Java MyBatis-ResultHandler未被调用

Java MyBatis-ResultHandler未被调用,java,sql,mybatis,Java,Sql,Mybatis,我举了一个例子: 这是我的界面: public interface CountryDirRdbMapper { public static class CountryDirBaseItemWithText { public CountryDirBaseItem baseItem; } public List<CountryDirBaseItem> select(ResultHandler handler); } 这是我的xml映射器 &l

我举了一个例子: 这是我的界面:

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);

在这之后,必须从处理程序中获取结果。

我找到了答案。不幸的是,MyBatis开发人员根本不关心用户。他们真可耻。事实上,当我们使用自定义结果处理程序时,我们必须使用会话而不是接口

MyResultHandler handler=new MyResultHandler();
session.select("select", handler);

之后,必须从处理程序中获取结果。

从信息片段中计算出来

您需要从安装程序中获取SqlSession的实例

sqlSession=sqlSessionFactory.openSession

要将映射器与结果处理程序一起使用,需要使映射器返回void变得重要,并为此映射器设置结果类型

@从用户中选择Select* void selectAllUserResultHandler处理程序

从sqlSession获取映射器

UserMapper mapper=sqlSession.getMapperUser.class

设置带有处理程序的会话方法,第一个参数是要与处理程序关联的映射器的方法名称

sqlSession.selectselectAllUser,您的结果处理器

开始使用映射器

mapper.selectAllUseryourResultHandler

完成后不要忘记释放关闭会话


从一些信息中找出了答案

您需要从安装程序中获取SqlSession的实例

sqlSession=sqlSessionFactory.openSession

要将映射器与结果处理程序一起使用,需要使映射器返回void变得重要,并为此映射器设置结果类型

@从用户中选择Select* void selectAllUserResultHandler处理程序

从sqlSession获取映射器

UserMapper mapper=sqlSession.getMapperUser.class

设置带有处理程序的会话方法,第一个参数是要与处理程序关联的映射器的方法名称

sqlSession.selectselectAllUser,您的结果处理器

开始使用映射器

mapper.selectAllUseryourResultHandler

完成后不要忘记释放关闭会话


这不准确-您可以使用接口使用结果处理程序执行映射语句,而无需使用会话。@Larry如果您写这样的评论,请提供一些有用的信息,因为其他人(如我)可能正在寻找相同的答案…这不准确-您可以使用接口执行映射语句使用结果处理程序而不使用会话。@Larry如果你写这样的评论,请提供一些有用的信息,因为其他人(如我)可能正在寻找相同的答案……谢谢你。我花了很长时间才找到解决办法。mybatis网站对此没有帮助。谢谢你。我花了很长时间才找到解决办法。mybatis网站对此没有帮助。