使用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
我是 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