Mybatis指定sql返回值类型

本文详细介绍了MyBatis中处理返回值的方法,包括单个返回值的处理,如更新操作直接返回影响行数;多个返回值时,可以使用POJO对象、List集合或Map集合进行封装。对于查询结果一行的数据,可以使用POJO对象;多行数据时,若数据间有关联,使用List封装POJO对象,否则使用Map存储。此外,还展示了如何使用Map封装一行或多行查询结果的情况。
摘要由CSDN通过智能技术生成

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

方法一、返回值只有一个:

  • 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>
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姓蔡小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值