MyBatis如何调用存储过程呢?
下文笔者讲述Mybatis中调用存储过程的方法分享,如下所示
Mybatis调用存储过程的实现思路
设置调用mode为IN 即可调用存储过程 <!-- 存储过程 --> <select id="selectSomeThing" statementType="CALLABLE" parameterType="hashmap" resultType="com.java265.mybatis.po.User"> {CALL PROC_FOR_INPUT(#{information,mode=IN,jdbcType=VARCHAR})} </select> 注意事项: 参数“mode” 值有IN(输入参数)、OUT(输出参数)和INOUT(输入/输出参数)例:Mybatis调用存储过程的示例
1.在MySQL数据库中创建用户信息表(tb_user) -- 创建“用户信息”数据表 CREATE TABLE IF NOT EXISTS tb_user ( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号', user_name VARCHAR(50) NOT NULL COMMENT '用户姓名', sex CHAR(2) DEFAULT '男' COMMENT '性别' ) COMMENT = '用户信息表'; 2.创建存储过程,实现分页查询用户列表,并返回数据总数和总页数。 -- 将结束标志符更改为$$ DELIMITER $$ /* -- 存储过程:分页查询用户列表,并返回数据总数和总页数 -- 输入参数:page_index:当前页码 -- 输入参数:page_size:分页大小 -- 输出参数:total_count:数据总数 -- 输出参数:total_page:总页数 */ CREATE PROCEDURE proc_search_user(IN page_index INT,IN page_size INT, OUT total_count INT, OUT total_page INT) BEGIN DECLARE begin_no INT; SET begin_no = (page_index-1)*page_size; -- 分页查询列表 SELECT * FROM tb_user WHERE id >= ( SELECT id FROM tb_user ORDER BY id ASC LIMIT begin_no,1 ) ORDER BY id ASC LIMIT page_size; -- 计算数据总数 SELECT COUNT(1) INTO total_count FROM tb_user; -- 计算总页数 SET total_page = FLOOR((total_count + page_size - 1) / page_size); END$$ -- 将结束标志符更改回分号 DELIMITER ; 3.创建用户信息持久化类User.java package com.java265.mybatis.po; /** * 用户信息的持久化类 * **/ public class User { private int id; //用户编号 private String userName; //用户姓名 private String sex; //性别 //省略getter与setter方法... } 4.编写SQL映射配置 <!-- 存储过程:分页查询用户列表,并返回数据总数和总页数 --> <select id="proc_search_user" statementType="CALLABLE" parameterType="hashmap" resultType="com.java265.mybatis.po.User"> {CALL proc_search_user(#{page_index,mode=IN,jdbcType=INTEGER}, #{page_size,mode=IN,jdbcType=INTEGER}, #{total_count,mode=OUT,jdbcType=INTEGER}, #{total_page,mode=OUT,jdbcType=INTEGER})} </select> 5.编写执行方法 /** * 使用MyBatis调用存储过程:分页查询用户列表,并返回数据总数和总页数 * */ @Test public void procSearchUser() { DataConnection dataConnection = new DataConnection(); SqlSession sqlSession = dataConnection.getSqlSession(); //封装查询参数 Map params = new HashMap(); params.put("page_index",2); //输入参数:当前页码 params.put("page_size",10); //输入参数:分页大小 params.put("total_count",0); //输出参数:数据总数 params.put("total_page",0); //输出参数:总页数 //调用存储过程 list<User> userList = sqlSession.selectList("test.proc_search_user",params); System.out.println("查询第"+ params.get("page_index") +"页的数据,每页共"+params.get("page_size")+"条数据"); //遍历用户列表 for (User user : userList) { System.out.println("编号:" + user.getId() +" 姓名:" + user.getUserName() + " 性别:" + user.getSex()); } //获取输出参数 System.out.println("数据总数:" + params.get("total_count")); System.out.println("总页数:" + params.get("total_page")); sqlSession.close(); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。