目录
一、返回值只有一个的情况:
方法一、返回值只有一个:
- 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>