Use*_*123 4 java postgresql jdbctemplate
我是 PostgreSQL 的新手。我需要从 spring jdbctemplate 调用 postgresql 函数来存储员工表的详细信息。下面是我使用插入查询来存储员工详细信息的代码。我需要用 Postgresql 函数“UpdateEmployee”替换插入查询。
@Autowired
JdbcTemplate postgressqljdbctemplate;
@Override
public void update(Employee employee) {
String SQL = "insert into employee(Id, name, age, salary) values (?,?,?,?)";
postgressqljdbctemplate.update(SQL, new Object[] { employee.getId(), employee.getName(),
employee.getAge(), employee.getSalary()});
}
Run Code Online (Sandbox Code Playgroud)
好的,您应该做的第一件事是设计用于插入/更新数据的函数。Postgres 为此支持多种语言,但最流行的一种是 plpgsql。
该函数本身可能如下所示:
CREATE OR REPLACE FUNCTION update_employee(p_id INT, p_name VARCHAR(255), p_age INT, p_salary DECIMAL)
RETURNS INT
LANGUAGE plpgsql
AS $$
BEGIN
IF p_id IS NULL
THEN
INSERT INTO employee (name, age, salary) VALUES (p_name, p_age, p_salary) RETURNING id INTO p_id;
ELSE
UPDATE employee
SET name = p_name, age = p_age, salary = p_salary
WHERE id = p_id;
END IF;
RETURN p_id;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用nullas ID调用此函数,它将插入数据,否则数据将通过指定的 id 找到并更新。
在这两种情况下,您都将获得修改记录的 ID。
CREATE OR REPLACE FUNCTION update_employee(p_id INT, p_name VARCHAR(255), p_age INT, p_salary DECIMAL)
RETURNS INT
LANGUAGE plpgsql
AS $$
BEGIN
IF p_id IS NULL
THEN
INSERT INTO employee (name, age, salary) VALUES (p_name, p_age, p_salary) RETURNING id INTO p_id;
ELSE
UPDATE employee
SET name = p_name, age = p_age, salary = p_salary
WHERE id = p_id;
END IF;
RETURN p_id;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
将插入功能与更新分开可能会更好,但这只是一个示例。
因此,您可以使用例如 SimpleJdbcCall 从 spring 调用该函数:
final SimpleJdbcCall updateEmployeeCall = new SimpleJdbcCall(jdbcTemplate).withFunctionName("update_employee");
final Map<String, Object> params = new HashMap<>();
params.put("p_id", null);
params.put("p_name", "John");
params.put("p_age", 28);
params.put("p_salary", 150000);
final Map<String, Object> result = updateEmployeeCall.execute(params);
System.out.println(result.get("returnvalue"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6258 次 |
| 最近记录: |