10.3 MyBatis调用存储过程 10.3.2查询数据返回集合

10.3 MyBatis调用存储过程 10.3.2查询数据返回集合

项目的创建请看上一篇.

创建存储过程

在之前创建的mybatis数据库中创建一个查询tb_user表所有数据的存储过程。SQL脚本如下:

1
2
3
4
5
6
7
8
drop procedure if exists select_user;
delimiter $$
create procedure select_user()
begin
select id,name,sex,age from tb_user;
end
$$
delimiter ;

mapper.xml映射

<select
    id="selectUser"
    resultType="domain.User"
    statementType="CALLABLE"> {call select_user()}
</select>

select标签调用名为”select_user“的存储过程查询所有User数据并返回List,查询到的每一条数据会被封装到User对象中,这和之前执行SQL语句返回数据的方式完全一致.

mapper接口方法

1
List<User> selectUser();

测试类

/MyProcedureTest/src/test/SelectTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class SelectTest {
public static void main(String[] args) {
SqlSession sqlSession = null;
// 1.获取SqlSession实例
sqlSession = SqlSessionFactoryTools.getSqlSession();
try {
// 2.获取Mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 3.调用mapper接口方法进行操作
List<User> users = userMapper.selectUser();
users.forEach(user -> {
System.out.println(" " + user);
});
// 5.提交事务
sqlSession.commit();
} catch (Exception e) {
// 6.出错回滚
sqlSession.rollback();
e.printStackTrace();
} finally {
// 7.关闭会话
if (sqlSession != null) {
sqlSession.close();
}
}
}
}

运行测试类,测试selectUser方法将调用存储过程查询所有用户信息。控制台显示如下:

1
2
3
4
5
6
7
8
9
10
DEBUG [main] ==>  Preparing: {call select_user()} 
DEBUG [main] ==> Parameters:
DEBUG [main] <== Total: 6
DEBUG [main] <== Updates: 0
User [id=1, name=小明, sex=男, age=21]
User [id=2, name=小王, sex=男, age=22]
User [id=3, name=小丽, sex=女, age=18]
User [id=4, name=小芳, sex=女, age=18]
User [id=5, name=小王, sex=男, age=22]
User [id=6, name=小李, sex=男, age=23]