Mybatis实现指定sql返回值类型

 更新时间:2025年12月22日 16:17:18   作者:姓蔡小朋友  
文章介绍了Mybatis中处理不同返回值情况的方法,包括返回值只有一个和有多个的情况,对于返回值只有一个,可以直接返回该值;对于多个返回值,可以使用POJO对象、List集合或Map集合进行封装,每种方法都有其适用的场景

一、返回值只有一个的情况

方法一:返回值只有一个

  • Mybatis返回值只有一个,如果sql的执行结果只有一个(如增删改返回int类型),那么可以直接返回这一个值即可。
  • 适用于查询结果只有一个值的情况。
//更新用户信息
int update(Student stu);
<!--按主键删除学生
	int update(Student stu);
	下面sql的返回值是执行成功的条数。
	update,insert,delete语句可以不写resultType
-->
    <update id="update" parameterType="com.user.pojo.Student" >
        update student set name=#{name} ,email=#{email} ,age=#{age}
        where id = #{id}
    </update>

但如果sql的返回值是多个,而Mybatis返回值只能返回一个值,所以必须把这多个返回值进行封装。

二、返回值有多个的情况

方法一:使用POJO对象封装结果,POJO对象作为返回值

  • 适用于查询结果有一行值,这些值可以使用POJO封装的情况。
//根据用户主键查用户,注意成员变量名和数据库表的列名要相同。
Student getById(int id);
<!--按主键id查询学生信息
    Student getById(Integer id);
    下面sql结果返回id,name,email,age,我们用Student对象封装并返回这个对象,返回值和对象的成员变量一一对应,底层调用对象的set方法给对象的成员变量赋值。
    resultType="com.user.pojo.Student"返回值必须写包的全限定类名。
-->
<select id="getById" parameterType="Integer" resultType="com.user.pojo.Student">
    Select id,name,email,age
    from Student
    where id = #{id}
</select>

如果返回值是多个,且这些返回值没有适合的POJO对象来封装,那么无法使用POJO对象作为返回值。(重要的是返回值之间没有联系,没有对象能封装他们)

方法二:List集合作为返回值

  • List集合原理其实就是对象封装,查询结果只有一行且该行的数据有联系的话,可以封装成一个对象,用一个对象封装返回就够了,但是查询结果有多行的时候,且每行的数据有联系的话,可以把每行的数据封装成一个对象,然后把所有行的对象添加到一个List集合中并返回。
  • 适用于查询结果有多行值,每行值可以使用POJO封装的情况。
//查询全部用户信息
List<User> getAll();
<!--
返回值是User对象封装的,User对象中封装了id,username,birthday,sex,address属性,返回多行,一行就是一个User对象,所有User对象都添加到一个List集合中返回。
其中List底层调用add方法将每个POJO对象加入到List集合中,POJO对象底层调用set方法给对象的成员变量赋值。
-->
<select id="getAll" resultType="user">
        select id,username,birthday,sex,address
        from users;
</select>

方法三:map集合作为返回值

  • 如果sql执行的结果有多行,多个数据之间没有任何关系且没有对象能封装这些数据,则需要使用集合map存储数据的返回值。(重要的是这些返回的数据之间没有联系,没有对象能封装他们)
  • map使用表中的列名或别名做为键名进行返回数据。

1.map封装返回值是一行

  • 适用于查询结果有一行值,这些值不能用POJO对象封装的情况。
//根据主键查用户对象
Map<String,Object> getReturnMapOne(int id);
<!--返回值类型是map,其中key是列名,value是查询结果-->
<select id="getReturnMapOne" resultType="map" parameterType="int">
    select id ,username ,sex ,address ,birthday 
    from users
    where id=#{id}
</select>

2.map封装返回之是多行

适用于查询结果有多行值,单独每一行的值不能用POJO对象封装。

//使用map封装单独一行,返回多个map的集合,即为多行--->List<Map<String,Object>>,每个map是查询到的一行数据结果,多行数据结果用list封装
List<Map<String,Object>> getReturnMap();
<!--这里的返回值类型是泛型的类型-->
<select id="getReturnMap" resultType="map" >
    select id ,username ,sex ,address ,birthday 
    from users
</select>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java CompletableFuture之异步执行、链式调用、组合多个Future、异常处理和超时控制等详解

    Java CompletableFuture之异步执行、链式调用、组合多个Future、异常处理和超时控制等详

    这篇文章主要介绍了Java CompletableFuture之异步执行、链式调用、组合多个Future、异常处理和超时控制等用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • JavaWeb如何实现本地文件上传功能

    JavaWeb如何实现本地文件上传功能

    这篇文章主要介绍了JavaWeb如何实现本地文件上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • spring boot装载自定义yml文件

    spring boot装载自定义yml文件

    这篇文章主要为大家详细介绍了spring boot装载自定义yml文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Spring基于xml文件配置Bean过程详解

    Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java实现自动化合并与拆分PowerPoint表格单元格

    Java实现自动化合并与拆分PowerPoint表格单元格

    通过 Spire.Presentation for Java,我们可以利用代码精准地控制表格的每一个角落,本文将详细介绍如何在 Java 后端实现 PPT 表格的合并与拆分操作,需要的可以了解下
    2026-02-02
  • 浅谈Java中几种常见的比较器的实现方法

    浅谈Java中几种常见的比较器的实现方法

    下面小编就为大家带来一篇浅谈Java中几种常见的比较器的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • vue vxe-table 实现财务记账凭证的方案

    vue vxe-table 实现财务记账凭证的方案

    使用 vxe-table 实现财务记账凭证非常简单,实现在线实时编辑的记账凭证、自动合计金额等,这篇文章主要介绍了vue vxe-table 实现财务记账凭证的方案,需要的朋友可以参考下
    2024-12-12
  • 重新对Java的类加载器的学习方式

    重新对Java的类加载器的学习方式

    这篇文章主要介绍了重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法

    Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法

    本文介绍在Spring Boot基础下配置数据源和通过 JdbcTemplate 编写数据访问的示例。感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-01-01
  • 深入理解Java String.replace()原理

    深入理解Java String.replace()原理

    String.replace()是我们日常开发中经常用到的一个方法,那么,你有看过其底层的源码实现吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03

最新评论