Mybatis对有可能返回empty set的数据库查询结果进行操作

举个栗子

我有一个用户 user 表,表中只有 id(int) 和 name(String) 字段(别在意细节),值都是唯一的。

现在我要注册一个新的用户,肯定先要检查要注册的用户名是否存在。那用 mybatis 该怎么做呢。首先 mapper 中写sql:

SELECT id FROM user WHERE name='lalala'

然后就是要配置传入和返回的数据类型

parameterType="java.lang.String"  resultType="java.lang.Integer"

那么接下来该确定在java中返回的数据类型

先用 Mapper<String, Object>,毕竟两项的值都是唯一的,然后 get 对应的key就能得到结果,结果 id 不为空则说明用户名已存在。当然这里说的是在用结果的情况下,能正常运行。但返回结果为空,也就是 mysql 返回的是 empty set 呢?判断是否 == null 不久行了?

然后就......java.lang.NullPointerException.................

WHY?这样写挺合逻辑呀。

应该还是在返回结果的适用类型上出了问题,因为用户名存在是能正常运行。那该用那种数据类型?

再回想下平时 mysql 命令台查询数据的时候,返回的格式是一个表,column 下都有对应的返回值,这是 Mapper,然后它还是一个列表,那这又对应 List


所以应该使用 List<Mapper<String, Object>>,当然只查询一个字段的时候 List<Object> 就行了。最后调用 isEmpty() 方法就能判断对应数据是否已存在。


仅做个人备忘和练习整理用,要是能帮到其他人那更好。Это все

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值