当前位置: 首页 > 知识库问答 >
问题:

java - Mybatis的注解@ResultType的场景是什么?

微生毅
2024-03-11

看源码的时候发现@ResultType只有在返回值类型为void时才会生效。

//源码参考: org.apache.ibatis.builder.annotation.MapperAnnotationBuilder#getReturnTypeif (void.class.equals(returnType)) {  ResultType rt = method.getAnnotation(ResultType.class);  if (rt != null) {      returnType = rt.value();  }}

那么假如我的应用代码如下,请问,queryStudent如何返回Student对象?或者说@ResultType的意义是什么?

@Select("select * from Student")@ResultType(Student.class)void queryStudent();

共有1个答案

羊渝
2024-03-11

@ResultType 注解是搭配 ResultHandler 来用的。

REF: https://mybatis.org/mybatis-3/java-api.html#mapper-annotations

This annotation is used when using a result handler. In that case, the return type is void so MyBatis must have a way to determine the type of object to construct for each row. If there is an XML result map, use the @ResultMap annotation. If the result type is specified in XML on the <select> element, then no other annotation is necessary. In other cases, use this annotation. For example, if a @Select annotated method will use a result handler, the return type must be void and this annotation (or @ResultMap) is required. This annotation is ignored unless the method return type is void.

所以你那个写法不对,起码你得定义一个 ResultHandler 出来:

@Select("select * from Student")@ResultType(Student.class)void queryStudent(StudentResultHandler resultHandler);public class StudentResultHandler implements ResultHandler {  private final List<Student> students;  public StudentResultHandler() {    students = new ArrayList<>();  }  @Override  public void handleResult(ResultContext context) {    Student student = (Student)context.getResultObject();    students.add(student);  }}
 类似资料:
  • 本文向大家介绍深入理解Mybatis中的resultType和resultMap,包括了深入理解Mybatis中的resultType和resultMap的使用技巧和注意事项,需要的朋友参考一下  一、概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部Res

  • useDefferedValue的运用场景是什么? 为什么我的这个并没有实现useDefferedValue的延迟效果(不影响input的更新) 理论上不是应该每次输入,更新新的state的时候,slowList后台重新渲染,然后input的输入是不影响的,但是如果再次输入,就会触发slowList新的渲染,抛弃旧的渲染。就类似于渲染的防抖吗? 重新找了些资料,但是也没有解决问题。。。 从结果来看

  • 本文向大家介绍Mybatis中的resultType和resultMap查询操作实例详解,包括了Mybatis中的resultType和resultMap查询操作实例详解的使用技巧和注意事项,需要的朋友参考一下 resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的

  • javafx中的stage只需要一个场景,而场景只需要一个根节点<所以我想知道这个场景的主要角色是什么?这似乎是一个场景连接了两个侧面,可以直接连接,而无需中间层<我只想理解其中的逻辑。非常感谢。

  • 主要内容:1. SQL 语句映射,2. 结果集映射,3. 关系映射为了简化 XML 的配置,MyBatis 提供了注解。我们可以通过 MyBatis 的 jar 包查看注解,如下图所示。 以上注解主要分为三大类,即 SQL 语句映射、结果集映射和关系映射。下面分别进行讲解。 1. SQL 语句映射 1)@Insert:实现新增功能 2)@Select:实现查询功能 3)@SelectKey:插入后,获取id的值 以 MySQL 为例,MySQL 在插入一条数据后

  • 本文向大家介绍 什么是断言?应用场景?相关面试题,主要包含被问及 什么是断言?应用场景?时的应答技巧和注意事项,需要的朋友参考一下