Spring RowMapper & RowCallbackHandler 使用及区分和个人见解

参考博客 https://blog.csdn.net/u013476542/article/details/53257788

相信大多数人来到这篇博客都是为了RowMapper使用来的, 那就先说RowMapper的使用

RowMapper使用

1, 查询多条记录

    @Test
    public void findAll() {
        String sql = "select * from user";
        List<User> users = jdbcTemplate.query(sql, new RowMapper<User>() {
            // int i : 别问, 问就是行号, 遍历到第几行了
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.setId(resultSet.getInt(1));
                user.setUsername(resultSet.getString(2));
                user.setPassword(resultSet.getString(3));
                return user;
            }
        });
        System.out.println(users);
    }

2,查询单条记录(up在页面上直接改的 ,应该没啥问题, 只是没测试 , 如果有错误 ,请留言 谢谢) 

    @Test
    public void find() {
        String sql = "select * from user where id = ?";
        User user = jdbcTemplate.queryForObject(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.setId(resultSet.getInt(1));
                user.setUsername(resultSet.getString(2));
                user.setPassword(resultSet.getString(3));
                return user;
            }
        }, 1);
        System.out.println(user);
    }

查询多条记录和查询单条记录使用的RowMapper是一样的 , 所以, 你可以将其封装成一个类, 专门用来封装对象

RowMapper 就是一个接口, 所以 封装实现类应该对你小菜一碟。

好了下面要说的是RowCallbackHandler

RowCallbckHandler

直接上Demo

    @Test
    public void callbackDemo(){
        String sql = "select * from user";
        jdbcTemplate.query(sql, new RowCallbackHandler() {
            @Override
            public void processRow(ResultSet resultSet) throws SQLException {
                /**
                 * 可以将一部分事务放在该方法底下做, 比如,给所有用户发送邮件,
                 * 只要不需要展示的, 我感觉都可以处理, 只是也导致Service层和DAO层有点分布不清,个人觉得需要在进行加工下, 这个方法才有用
                 * 个人感觉作用不大 , 其实还有其他方法可以避免内存压力过大...没必要用这种会导致项目分层不清的方法
                 * 避免了内存中出现大量数据库数据, 导致内存压力过大
                 */
                System.out.println(resultSet.getString("username"));
            }
        });
    }

这个方法, 怎么说呢  个人觉得会导致Service层和DAO层分布不清, 导致项目很混乱, 我个人不想用这玩意, 这玩意比较特殊的地方是: 可以避免出现大规模的数据库数据读入内存, 对比RowMapper就是, RowMapper将数据库查询数据全部读入List集合中, 会导致JVM内存压力过大, 具体参考文章开头的链接 。 但是 RowCallbackHandler感觉上并不是那么好使。。。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值