使用SpringJdbcTemplate连续提取两个字段

Using Spring JdbcTemplate to extract two fields in a row

我是 spring 的新手,我的要求如下: 使用spring jdbctemplate 连续提取两个字段。

我尝试使用 queryFOrObject() api,它适用于一个字段,但我不确定如何将它用于两个字段?

public String getSalarayAndSalaryCode(int id) {
   JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

   //not working
    String sql = "SELECT salary,sal_code FROM table WHERE ID=?";

   //working
    String sql = "SELECT sal_code FROM table WHERE ID=?";

     String output= (String) jdbcTemplate.queryForObject(
        sql, new Object[] { id }, String.class);

   return output;
}

字符串 sql = "SELECT salary,sal_code FROM table WHERE ID=?";

我想在一次查询中得到薪水和sal_code。

1) 创建一个 POJO,其中包含反映所需 select 结果的字段。

2) 创建一个RowMapper<Pojo>并将其作为queryForObject的参数之一传递。它可以被视为一个功能接口,因此您可以实现类似的功能:

RowMapper<Pojo> pojoRowMapper = (ResultSet rs, int rowNumber) -> {
        Pojo res = new Pojo();

        res.setSalaryCode(rs.getString("sal_code"));
        ...
};
import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

public class SalaryRowMapper implements RowMapper
{
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        Salary salary= new Salary();
        salary.setSalary(rs.getInt("salary"));
        salary.setSalaryCode(rs.getString("sal_code"));
        return salary;
    }
}

并如下更改您的代码:

public String getSalarayAndSalaryCode(int id) {
   JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    String sql = "SELECT salary,sal_code FROM table WHERE ID=?";

     String output= (String) jdbcTemplate.queryForObject(
        sql, new Object[] { id }, new SalaryRowMapper());

   return output;
}

您可以使用 queryForMap

String sql = "SELECT salary,sal_code FROM table WHERE ID=?";
Map<String, Object> result =  (Map<String, Object>) jdbcTemplate
                              .queryForMap(sql, new Object[] {id});

所以地图包含

     Key           column
   column name     value
   column name     value