Java 为什么Spring RowMapper只返回结果集中的最后一条记录?
我试图使用sql查询语句从2个数据库表ADMIN_用户和提供程序中检索具有提供程序的用户 选择ADMIN\u USER.ID UserID、ADMIN\u USER.USER\u NAME、ADMIN\u USER.PASSWORD密码、ADMIN\u USER.FULL\u NAME全名、ADMIN\u USER.PRIVILEGE、ADMIN\u USER.PROVIDER\u ID、PROVIDERS.ID providerID、PROVIDERS.USER\u NAME PROVIDER from ADMIN\u USER、PROVIDER其中ADMIN\u USER.PROVIDER\u ID=PROVIDERS.ID 这就是我的方法 `公共列表用户{Java 为什么Spring RowMapper只返回结果集中的最后一条记录?,java,spring,jdbctemplate,ojdbc,Java,Spring,Jdbctemplate,Ojdbc,我试图使用sql查询语句从2个数据库表ADMIN_用户和提供程序中检索具有提供程序的用户 选择ADMIN\u USER.ID UserID、ADMIN\u USER.USER\u NAME、ADMIN\u USER.PASSWORD密码、ADMIN\u USER.FULL\u NAME全名、ADMIN\u USER.PRIVILEGE、ADMIN\u USER.PROVIDER\u ID、PROVIDERS.ID providerID、PROVIDERS.USER\u NAME PROVIDER
return DS.query(sqlQuery,new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum)
throws SQLException {
User user = new User();
user.setId(rs.getInt("UserID"));
user.setUserName(rs.getString("Name"));
user.setPassword(rs.getString("Password"));
user.setFullName(rs.getString("fullName"));
user.setPrivilage(rs.getString("PRIVILEGE"));
Provider provider=new Provider();
provider.setId(rs.getInt("providerID"));
provider.setName(rs.getString("provider"));
user.setProvider(provider);
return user; }}); }`
但是它只返回方法结果集中的最后一条记录作为list.size显示size=1而不是4
我认为连接是正确的,因为结果记录显示正确的连接,但我认为RowMapper中的问题是什么
使用spring、JDBC、NamedParameterJdbcTemplate从2个联接表中检索数据还有其他方法吗
提前感谢下面是一个使用spring的NamedParameterJdbcTemplate实现的示例
public class UserRepo {
private NamedParameterJdbcTemplate jdbcTemplate;
private static final String sqlQuery = "Your query here";
//Assuming you are using spring and have a datasource bean defined named datasource
@Autowired
public UserRepo(Datasource datasource) {
this.jdbcTemplate = new NamedParameterJdbcTemplate(datasource);
}
public List<User> getUsers() {
List<User> results = jdbcTemplate.query(sqlQuery, new UserMapper());
}
private static final class UserMapper implements
RowMapper<User> {
mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("UserID"));
user.setUserName(rs.getString("Name"));
user.setPassword(rs.getString("Password"));
user.setFullName(rs.getString("fullName"));
user.setPrivilage(rs.getString("PRIVILEGE"));
Provider provider=new Provider();
provider.setId(rs.getInt("providerID"));
provider.setName(rs.getString("provider"));
user.setProvider(provider);
return user;
}
}
}
你有没有在java之外测试过这个查询,看看它是否返回了你所期望的结果?还有,DS是什么?如果你使用spring,我可以给你展示一个使用jdbcTemplate的示例。是的,我测试过它,效果很好-DS的名称是ParameterJDBCTemplate object,如果你有一个使用多个表的示例,请给我,并试着告诉我产生此结果的原因?!只需确保sql语句中的所有列名别名与您试图在rowMapper中将它们映射到的列名别名匹配。这与它仅返回最后一条记录的结果相同,并且返回列表的大小为1而不是4@Ericf