首页 > 解决方案 > 执行带有多个参数的存储过程,并使用spring data jpa将ResultSet映射到非实体类

问题描述

我们最近迁移到 Spring Data JPA(使用 Spring-boot 2.1.5-RELEASE)并且需要执行具有多个输入参数的存储过程并映射到非实体 POJO(我将在保存时将值设置为实体类对象)。谁能提供一个关于如何实现的示例/描述?我没有从文档中得到太多,或者可能我错过了。

任何帮助,将不胜感激。

标签: javaspring-bootjpaspring-data-jpaspring-data

解决方案


最直接、最简单的解决方案是使用SimpleJDBCCall并忘记此数据资源的 JPA。该文档广泛涵盖了参数。

像这样的东西会起作用:

public class MyDao implements SomeDao {

    private JdbcTemplate jdbcTemplate;
    private SimpleJdbcCall procReadStuff;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
        this.procReadStuff = new SimpleJdbcCall(dataSource)
                .withProcedureName("my_procedure");
    }

    public void readStuff(Long id) {
        SqlParameterSource in = new MapSqlParameterSource()
                .addValue("in_id", id);
        Map out = procReadStuff.execute(in);
        Stuff stuff = new Stuff();
        stuff.setId(id);
        stuff.setSomeString((String) out.get("out_some_string"));

        // ...do something with Stuff POJO
    }

}

此示例是从文档中的示例中提取/修改的:文档


推荐阅读