为什么阿里巴巴的 Java 手册不推荐使用存储过程?

Sherwin.Wei Lv7

为什么阿里巴巴的 Java 手册不推荐使用存储过程?

回答重点

1)可移植性差

  • 数据库依赖性:存储过程是在数据库服务器上执行的,通常使用数据库特定的 SQL 方言和功能,这会导致应用程序的数据库依赖性增加,迁移到其他数据库系统时有成本。
  • 跨平台问题:不同的数据库系统实现存储过程的方式和支持的功能不完全相同,维护比较复杂。

2)调试困难

  • 调试工具有限:相比应用层代码,数据库层的存储过程缺乏良好的调试工具和环境。常规的代码调试方法(如设置断点、逐步执行)在存储过程中无法直接应用,导致复杂业务场景,不容易定位错误。

3)维护复杂

  • 存储过程通常与应用程序代码分离,维护起来需要同时管理数据库层和应用层的逻辑,增加了代码管理的复杂性。

扩展知识

什么是存储过程

存储过程是存储在数据库中的一段预编译的 SQL 代码,封装了一组操作来执行特定的业务逻辑。

例如我们想创建一个存储过程,方便通过员工 ID 获取员工的姓名和薪资:

1
2
3
4
5
6
7
8
9
10
11
DELIMITER $$

CREATE PROCEDURE GetEmployeeInfo(IN emp_id INT, OUT emp_name VARCHAR(100), OUT emp_salary DECIMAL(10, 2))
BEGIN
SELECT name, salary
INTO emp_name, emp_salary
FROM employees
WHERE id = emp_id;
END $$

DELIMITER ;

直接利用 CALL 就可以调用存储过程:

1
2
3
4
5
6
7
8
9
-- 定义变量用于存储输出参数
SET @emp_name = '';
SET @emp_salary = 0;

-- 调用存储过程
CALL GetEmployeeInfo(1, @emp_name, @emp_salary);

-- 查看结果
SELECT @emp_name AS EmployeeName, @emp_salary AS EmployeeSalary;

它的优点是预编译提升执行速度且减少网络通信开销、提高代码重用性。

Comments
On this page
为什么阿里巴巴的 Java 手册不推荐使用存储过程?