做公司 网站,为什么使用html5网站,短视频平台,怎样用微信做购物网站今天遇到一个问题 系统线上问题#xff0c;经常出现这样的问题#xff0c;刚重启系统时不报错了#xff0c;可是运行一段时间又会出现。sql已经写了limit 1#xff0c;mybatis的debug日志也返回total为1#xff0c;可是却报错返回了1805条数据 乍一看#xff0c;感觉太不…今天遇到一个问题 系统线上问题经常出现这样的问题刚重启系统时不报错了可是运行一段时间又会出现。sql已经写了limit 1mybatis的debug日志也返回total为1可是却报错返回了1805条数据 乍一看感觉太不可思议了 其实还是被默认的东西给坑到了也不能说是坑就是不理解里面的原理拿来就用以为是这个功能其实还有隐藏的内幕在里面。
这个里面的东西就是selectOne方法这个方法我们以为的查询方式是这样的
select code,username,sex,age,birth from t_user where code#{code} limit 1
但是它里面并没有那么智能就像它的名字selectOne一样你想查询一条记录那么我就帮你查一条记录如果有多条记录那么我报错也是合情合理的吧毕竟你只查一条记录也没有说要查哪一条是吧。
实际上MyBatis Pluscom.baomidou.mybatisplus.core.mapper.BaseMapper.selectOne是这样的
/*** 根据 entity 条件查询一条记录现在会根据{code throwEx}参数判断是否抛出异常如果为false就直接返回一条数据* p查询一条记录例如 qw.last(limit 1) 限制取一条记录, 注意多条数据会报异常/p** param queryWrapper 实体对象封装操作类可以为 null* param throwEx boolean 参数为true如果存在多个结果直接抛出异常*/default T selectOne(Param(Constants.WRAPPER) WrapperT queryWrapper, boolean throwEx) {ListT list this.selectList(queryWrapper);// 抄自 DefaultSqlSession#selectOneint size list.size();if (size 1) {return list.get(0);} else if (size 1) {if (throwEx) {throw new TooManyResultsException(Expected one result (or null) to be returned by selectOne(), but found: list.size());}return list.get(0);}return null;}
而MyBatisorg.apache.ibatis.session.defaults.DefaultSqlSession.selectOne是这样的
Overridepublic T T selectOne(String statement, Object parameter) {// Popular vote was to return null on 0 results and throw exception on too many.ListT list this.selectList(statement, parameter);if (list.size() 1) {return list.get(0);}if (list.size() 1) {throw new TooManyResultsException(Expected one result (or null) to be returned by selectOne(), but found: list.size());} else {return null;}}
是吧拿来的东西固然好但是也要花点时间学习里面的精髓。 问题来源
java报错:使用mybatis plus查询一个只返回一条数据的sql却报错返回了1000多条_编程语言-CSDN问答