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>

总结

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

相关文章

  • 测试环境频繁Full GC问题的解决思路分析

    测试环境频繁Full GC问题的解决思路分析

    全文介绍了作者通过与调用方交互,发现welink-front服务不可用的问题,通过jmap-heap和jstat-gccause命令,作者找到了问题的原因是元数据区内存使用率过高,触发了FullGC,作者通过分析GC日志和堆内存使用情况,确定了问题的根本原因
    2025-01-01
  • java Spring Boot 配置redis pom文件操作

    java Spring Boot 配置redis pom文件操作

    这篇文章主要介绍了java Spring Boot 配置redis pom文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • SpringMvc web.xml配置实现原理过程解析

    SpringMvc web.xml配置实现原理过程解析

    这篇文章主要介绍了SpringMvc web.xml配置实现原理过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java使用JavaMail发送邮件的方法

    Java使用JavaMail发送邮件的方法

    这篇文章主要介绍了Java使用JavaMail发送邮件的方法,结合实例形式分析了Java使用JavaMail实现邮件发送的具体步骤与相关实现代码,需要的朋友可以参考下
    2016-04-04
  • Java Map 按key排序和按Value排序的实现方法

    Java Map 按key排序和按Value排序的实现方法

    下面小编就为大家带来一篇Java Map 按key排序和按Value排序的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Spring Cloud之远程调用OpenFeign参数传递

    Spring Cloud之远程调用OpenFeign参数传递

    本文介绍了Spring Cloud中使用OpenFeign进行远程调用时,参数传递的不同方式,包括传递单个参数、多个参数、对象和JSON数据,感兴的朋友一起看看吧
    2025-03-03
  • 利用Java实现Word文档自动编号提取的方法详解

    利用Java实现Word文档自动编号提取的方法详解

    文章介绍如何用Java从Word试卷中提取自动编号,通过创建NumberingContext类识别中文、阿拉伯数字及字母等不同编号格式,并实现getParagraphNumbering方法完成结构化转换,解决了传统方法无法解析编号的问题,感兴趣的小伙伴可以参考阅读下
    2025-09-09
  • JavaFx UI控件与代码间的绑定方法

    JavaFx UI控件与代码间的绑定方法

    这篇文章主要为大家详细介绍了JavaFx UI控件与代码间如何绑定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Spring 依赖注入、AOP代理全方面解析

    Spring 依赖注入、AOP代理全方面解析

    文章介绍了软件开发中的开闭原则、依赖倒置原则及Spring非侵入式设计,通过IoC和DI实现解耦,提升系统扩展性、可测试性及架构迁移能力,强调框架能力以无感知方式注入业务代码的核心优势,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-08-08
  • Spring之IOC底层原理详解

    Spring之IOC底层原理详解

    这篇文章主要介绍了Spring之IOC底层原理,内容详细,文章简单易懂,具有一定的参考价值,需要的朋友可以参考下
    2023-01-01

最新评论