如何使用 java lambda 表达式实现 RowMapper

2022-09-02 23:59:08

我有一个工作 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;

有人可以帮助我正确实现代码吗?任何想法,以获得人员名单?


答案 1

RowMapper 是一个具有单个抽象方法(不是从 方法继承)的接口,因此可以将其视为功能接口。它的函数方法采用 a 和 a,并返回一个对象。ObjectResultSetint

代码的第一个问题是返回的对象类型是接口的泛型类型。与 当前一起使用时,您使用的是 raw 类型,而您不应该这样做。第二个问题是lambda表达式不返回任何对象,因此它不能符合函数方法,除了要返回的对象。RowMapper

因此,更正后的代码将是:

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;
};

答案 2

使用 lambda 表达式的 RowMapper 示例:

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;

                });

推荐