最近在复习sqping,选择看spring实战第五版,但是其中总会有不理解的地方,所以选择解决之后并记录
package tacos.data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import tacos.Ingredient; import java.sql.ResultSet; import java.sql.SQLException; @Repository public class JdbcIngredientRepository implements IngredientRepository { @Autowired JdbcTemplate jdbc; public JdbcIngredientRepository(JdbcTemplate jdbc){ this.jdbc=jdbc; } @Override public IterablefindAll() { return jdbc.query("select id,name,type from Ingredient",this::mapRowToIngredient); } @Override public Ingredient findOne(String id) { return jdbc.queryForObject("select * from Ingredient where id=?",this::mapRowToIngredient,id); } @Override public Ingredient save(Ingredient ingredient) { jdbc.update("insert into Ingredient(id,name,type)value (?,?,?)",ingredient.getId(), ingredient.getName(),ingredient.getType().toString()); return ingredient; } private Ingredient mapRowToIngredient(ResultSet re,int rowNum) throws SQLException { return new Ingredient(re.getNString("id"),re.getNString("name"), Ingredient.Type.valueOf(re.getNString("Type"))); } }
我的疑问是query方法的第二个参数是rowmapper,作用完成数据自动装配到javaBean对象
但是为什么可以用最下面自定义的方法来代替第二个参数
private Ingredient mapRowToIngredient(ResultSet re,int rowNum) throws SQLException { return new Ingredient(re.getNString("id"),re.getNString("name"), Ingredient.Type.valueOf(re.getNString("Type"))); }
有人告诉我这种写法是典型的函数式编程,但我确实不太理解
之后经过查询和询问结果就是:ResultSet里存的是查询结果集,this::的意义就是引用下面的方法,把查询到的结果都映射成一个个的java对象,
下面是显示rowmapper写法
@Override public IterablefindAll() { // return jdbc.query("select id,name,type from Ingredient",this::mapRowToIngredient); return jdbc.query("select id,name,type from Ingredient", new RowMapper () { @Override public Ingredient mapRow(ResultSet resultSet, int i) throws SQLException { return new Ingredient(resultSet.getNString("id"),resultSet.getNString("name"), Ingredient.Type.valueOf(resultSet.getNString("type"))); } }); }
也许这种更好理解,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)