0%

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映射

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

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

mapper接口方法

1
List<User> selectUser();

测试类

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
28
29
30
public class selectTest {
public static void main(String[] args)
{
SqlSession sqlSession = null;
// 1.获取SqlSession实例
sqlSession = SqlSessionFratoryTools.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]

原文链接: 10.3 MyBatis调用存储过程 10.3.2查询数据返回集合