学习mybatis-plus时发现其内部代码里面根据id删除这个方法里面的参数类型是Serializable 感觉到有点好奇,为什么要用这个类型的数据。
default boolean removeById(Serializable id) {
return SqlHelper.retBool(getBaseMapper().deleteById(id));
}
原因:
因为大多数的数类型都继承于Number抽象类,而mybatis内部大量运用了反射代理,反射代理的类型必须是接口,因此沿着Number往上走我们可以看到Number实现了Serializable接口。由此我们就可以知道作者写Serializable类型的原因了,因为作者向提高程序的兼容性和抽象性,但是JDK是写死的,因此往上走就只能找到Serializable来作为数据类型。不得不感慨mybatis-plus作者以经注经的能力。