MybatisPlus 只取一条记录时报错该怎么处理呢

364 阅读1分钟

不知大家是否用mybatisplus碰到过以下的错误信息:

image.png 其实在使用Mapper的selectOne()和IService的getOne()方法时稍不注意都可能会出现这个报错信息。 那怎么解决此类问题呢?

image.png 其实通过分析源码我们可以看到此方法调用了ServiceImpl的getOne()方法,第二个参数 throwEx默认为true,接着看BaseMapper类中selectOne方法。

image.png 看到这里想必大家都明白了,只要我们查询的结果有多条相同数据时就会报这个异常信息,那么我们只要把throwEx修改为false之后时只取第一条这个异常就不会出现了。 不过这样做有个弊端,可能查询了多条数据(虽然最后只给你返回了一条),但这样可能会使服务器承担额外的负担,mysql数据库的话最好还是在查询的后面添加limit 1。这个官方也给了提示。 我们可以通过继承默认的service方法来修改getOne方法。

image.png

最后还有个终极方案,可以兼容不同数据库的解决方案,前提是项目引入了

image.png 那么我们只要在selectOne或者getOne方法上加上即可以解决

PageHelper.startPage(1, 1, false);