nwG*_*ham 11 java lambda spring jdbctemplate
我有一个工作的RowMapper代码,它将数据库表行映射到java对象.我想用lambda表达式来改变实现.但是,我总是得到错误; 代码段如下;
String queryString = "select * from person where person_id = ? ";
RowMapper rowMapper = (rs, rowNum) -> {
Person p = new Person();
p.setName(rs.getString("personName"));
p.setAddress(rs.getString("address"));
p.setAge(rs.getInt("age"));
}
Person person = getJdbcTemplate().query(queryString, personId, rowMapper);
return person;
Run Code Online (Sandbox Code Playgroud)
有人可以帮我正确实现代码吗?有想法得到人名单吗?
Tun*_*aki 17
RowMapper
是一个具有单个抽象方法的接口(不是从方法继承Object
),因此它可以被认为是一个功能接口.它的功能方法采用a ResultSet
和a int
,并返回一个对象.
代码的第一个问题是返回的对象的类型是接口的泛型类型.正如目前使用的那样RowMapper
,你使用的是原型,你不应该这样做.第二个问题是lambda表达式不返回任何对象,因此它不能符合除了要返回的对象之外的函数方法.
因此,更正的代码将是:
RowMapper<Person> rowMapper = (rs, rowNum) -> {
Person p = new Person();
p.setName(rs.getString("personName"));
p.setAddress(rs.getString("address"));
p.setAge(rs.getInt("age"));
return p;
};
Run Code Online (Sandbox Code Playgroud)
RowMapper 使用 lambda 表达式示例:
return jdbcTemplate.query(" select Scale_Point,Scale_Head from TEval_Scale ", new Object[] {},
(resultSet, rowNum) ->{
TEvalScale tEvalScale = new TEvalScale();
tEvalScale.setScalePoint(resultSet.getInt("Scale_Point"));
tEvalScale.setScaleHead(resultSet.getString("Scale_Head"));
return tEvalScale;
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15500 次 |
最近记录: |