Template中的queryForObject和query的区别!

前言:最近在看视频学习的时候,发现在操作数据库的时候,经常写这两个语句

一:

    public User findByUsernameAndPassword(String Username,String Password) {
        User user=null;
        try {
            String sql="select * from tab_user where username = ? and password = ?";
            user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), Username, Password);
        }catch (Exception e){
            
        }
        return user;
    }

二:

public List<Category> findAll() {
        String sql="select * from tab_category";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<Category>(Category.class));

    }

所以就非常好奇这两个方法到底有什么区别,我们一探究竟。

而自我感觉是:

queryForObject(String sql, RowMapper rowMapper, Object... args)  只返回一条记录

query(String sql, RowMapper rowMapper)  可以返回一组记录

去查看源代码

queryForObject(ctrl+鼠标左击)

   可以看到它是通过一个List集合来存储了结果,返回的时候又调用了一个方法,如果返回数据不符合规定就抛出异常,而不是直接返回被取出不符合规定的数据。进一步看源码

    通过查看源码我们可以看到,用size存储按 sql语句 从数据库中返回的结果集 results,如果 结果集为 null,size就为0。否则 size 就为结果集长度。

然后判断 size :

      1. ==0:抛出空结果集异常。

      2. >1:抛出不正确的结果集长度异常

      3. ==1:因为返回结果集不可能为负数,所以else判断的肯定是size==1的情况。这时候返回结果集的迭代器的next(),即让迭代器的指针指向下一位。

也就是说:queryForObject 只返回了一个User对象,如果长度不是1就会抛出异常。

queryForObject(ctrl+鼠标左击)

这个就是直接返回了一个List集合。


通过查看其他文章,然后自己就当做笔记记录了下。

原文:https://blog.csdn.net/doubleguy/article/details/105167560?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162289558716780269852545%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162289558716780269852545&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-105167560.pc_search_result_before_js&utm_term=query%E5%92%8Cqueryforobject%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值