举个栗子
我有一个用户 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() 方法就能判断对应数据是否已存在。
仅做个人备忘和练习整理用,要是能帮到其他人那更好。Это все