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

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)


wah*_*cse 5

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)