我是Postgresql的新手.我需要从spring jdbctemplate调用postgresql函数来存储Employee表的详细信息.以下是我使用插入查询存储Employee详细信息的代码.我需要用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()});
}
解决方法:
好的,您应该做的第一件事就是设计用于插入/更新数据的功能. 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;
$$;
现在,如果您使用null作为ID调用此函数,它将插入数据,否则将通过指定的ID查找数据并进行更新.
SELECT update_employee(NULL, 'John', 42, 100000); -- insert (returns 1)
SELECT update_employee(1, 'John Smith', 42, 200000); -- update prevIoUs record
因此,您可以使用例如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"));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。