springboot jdbctemplate执行存储过程获取返回结果的场景中,用到了内部类,但是当需要给存储过程传入参数时,会出现内部类不允许使用外部变量的问题。如何让变量即可以编辑,又可以让内部类使用呢
时间: 2024-03-20 16:43:32 浏览: 54
在需要传参的情况下,可以将需要传入的参数作为成员变量声明在外部类中,然后在内部类中使用时,通过构造函数传入参数即可。示例代码如下:
```java
@Component
public class JdbcTemplateDemo {
private final JdbcTemplate jdbcTemplate;
private final String querySql = "{CALL get_user_info(?)}";
private Long userId;
public JdbcTemplateDemo(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void getUserInfo(Long userId) {
this.userId = userId;
UserInfo userInfo = jdbcTemplate.execute(connection -> {
try (CallableStatement callableStatement = connection.prepareCall(querySql)) {
callableStatement.setLong(1, this.userId);
try (ResultSet resultSet = callableStatement.executeQuery()) {
if (resultSet.next()) {
return new UserInfo(resultSet.getLong("id"), resultSet.getString("name"));
} else {
return null;
}
}
}
});
System.out.println(userInfo);
}
private static class UserInfo {
private Long id;
private String name;
public UserInfo(Long id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
}
```
在上面的示例代码中,`userId`作为成员变量被声明在外部类中,然后在内部类中通过构造函数将其传入,以便在存储过程中使用。这样可以同时解决内部类不允许使用外部变量的问题和需要传入参数的问题。
阅读全文