栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC Template的query方法第二个参数:自定义方法替代rowmapper和lambda表达式使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC Template的query方法第二个参数:自定义方法替代rowmapper和lambda表达式使用

最近在复习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 Iterable findAll() {
        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 Iterable findAll() {
       // 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")));
            }
        });
    }
​

也许这种更好理解,

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号