BeanPropertyRowMapper原理

本文详细介绍如何使用Spring的JdbcTemplate进行复杂的数据查询操作,包括使用RowMapper手动映射数据库查询结果到Java对象,以及利用Spring提供的BeanPropertyRowMapper简化映射过程。文章还讲解了查询集合和单个对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Spring的JdbcTemplate模板查找所有
在这里插入图片描述
查询需要sql语句和rowMapper映射

 /**
     * 查询集合List<POJO>
     * @return
     */
    public List<Account> selectAll(){

        String sql = "select * from Account";
        List<Account> list = template.query(sql, new RowMapper<Account>() {
            public Account mapRow(ResultSet resultSet, int i) throws SQLException {
                //ResultSet是数据库单条记录
                //i是循环的次数
                System.out.println(i);
                return rowMapperHandler(resultSet);
            }
        });
        return list;
    }

手动创建rowMapperHandler工具类


    /**
     * 工具方法:把数据库一条记录映射成一个POJO,
     * 如果表的字段和对像属性一致的话,可以使用spring提供BeanPropertyRowMapper
     * 不论查询集合,还是单个对像,返回值一定是要封装成的POJO类型
     * @param resultSet 对应数据库的单条记录,不带表整个结果集
     * @return
     */
    public Account rowMapperHandler(ResultSet resultSet){
        try {
            Integer id = resultSet.getInt("id");
            String username = resultSet.getString("username");
            Double money = resultSet.getDouble("money");
            Account account = new Account();
            account.setId(id);
            account.setMoney(money);
            account.setUsername(username);
            return account;
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

代码重复量大,Spring提供了BeanPropertyRowMapper将上面代码封装

 public List<Account> selectById2(){
        String sql = "select * from Account";
        BeanPropertyRowMapper<Account> mapper = new BeanPropertyRowMapper<Account>(Account.class);
        List<Account> list = template.query(sql, mapper);
        return list;
    }

查询单个

   /**
     * 查询单个POJO,使用内置映射类BeanPropertyRowMapper
     * @param id
     * @return
     */
    public Account selectById2(int id){
        String sql = "select * from Account where id = ?";
        BeanPropertyRowMapper<Account> mapper = new BeanPropertyRowMapper<Account>(Account.class);
        Account account = template.queryForObject(sql, mapper,id);
        return account;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值