我有一个有效的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;
有人可以帮助我正确实现代码吗?
有想法得到人员名单吗?
最佳答案
RowMapper
是具有单个抽象方法(不继承自Object
方法)的接口(interface),因此it can be considered a functional interface。其功能方法采用ResultSet
和int
,并返回一个对象。
代码的第一个问题是返回的对象的类型是接口(interface)的通用类型。如当前与RowMapper
一起使用,您正在使用原始类型which you shouldn't do。第二个问题是,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;
};