我有一个有效的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。其功能方法采用ResultSetint,并返回一个对象。

代码的第一个问题是返回的对象的类型是接口(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;
};

10-01 21:56
查看更多