我有一个工作的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;
有人可以帮我正确实现代码吗? 有想法获得人员名单吗?
答案 0 :(得分:16)
RowMapper
是一个带有单个抽象方法的接口(不是继承自>>> import imageio
>>> imageio.plugins.ffmpeg.download()
的方法),所以it can be considered a functional interface。其功能方法采用Object
和ResultSet
,并返回一个对象。
代码的第一个问题是返回的对象类型是接口的泛型类型。与目前int
一起使用时,您使用的是原始类型which you shouldn't do。第二个问题是lambda表达式不返回任何对象,因此它不能符合除了要返回的对象之外的函数方法。
因此,更正的代码将是:
RowMapper
答案 1 :(得分:3)
使用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;
});
答案 2 :(得分:1)
@Tunaki是正确的。这是简写版本:
RowMapper<Person> rowMapper = (rs, rowNum) -> new Person(rs.getString("personName"), rs.getString("address"),rs.getInt("age")) ;
不需要括号和返回号,因为它们是隐含的。
答案 3 :(得分:0)
除了@Tunaki答案。
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;
};
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("person_id", personId);
如果您想获得一个人:
Person person = getJdbcTemplate().queryForObject(queryString, paramMap, rowMapper);
如果要获取人员列表:
List<Person> personList = getJdbcTemplate().query(queryString, paramMap, rowMapper);