存储过程创建
- 很长时间没有在项目中使用到存储过程,今天特意回顾一下存储过程的创建与调用。存储过程类似于Java中的函数,我们定义函数(存储过程)将内部逻辑(SQL)封装。在调用时,只需要指定方法名(存储过程名称),传入对应的参数即可。下面我们在mysql终端定义存储过程
1 mysql> delimiter $$ //定义与mysql默认的结束符(;)不同的结束符,避免下面的sql遇到(;)结束存储过程的创建
2 mysql> create procedure getPowerUnit(in puId varchar(50)) //这里的varchar需要指定长度
3 -> begin
4 -> select * from power_unit where pu_id = puId;
5 -> end$$ //新定义的结束符,到此存储过程定义结束
6 Query OK, 0 rows affected (0.12 sec)
7 mysql> delimiter ; //切换为默认的结束符号
存储过程调用
- 上面我们定义了通过表主键pu_id查询记录的一个存储过程,在调用时需要使用指令
call
1 mysql> call getPowerUnit('pu20191213144059-0');
2 +--------------------+----------+----------------+-------------+-------------------+-------------+-------------+---------------+---------------------+-------------+-------------+---------------+--------+
3 | pu_id | pu_name | description | admin_state | operational_state | pu_validity | pu_owner_id | pu_owner_name | create_time | cancel_time | delete_time | particle_size | belong |
4 +--------------------+----------+----------------+-------------+-------------------+-------------+-------------+---------------+---------------------+-------------+-------------+---------------+--------+
5 | pu20191213144059-0 | 1000KG缸 | 布带/码装/织带 | 1 | 1 | 1 | 1 | 负责人 | 2019-12-13 14:41:00 | NULL | NULL | 1 | NULL |
6 +--------------------+----------+----------------+-------------+-------------------+-------------+-------------+---------------+---------------------+-------------+-------------+---------------+--------+
7 1 row in set (0.00 sec)
8
9 Query OK, 0 rows affected, 1 warning (0.04 sec)
mybatis调用存储过程
- 这里省略mapper接口中定义的抽象方法“Power selectPowerUnitById(String puId)”
1 <!-- 添加用户 -->
2 <select id="selectPowerUnitById" parameterType="java.lang.String" statementType="CALLABLE">
3 {call getPowerUnit(#{puId,mode=IN})}
4 </select>
定义完成,接下来与正常开发中的使用一致!
详细教程