2 回答
TA贡献1995条经验 获得超2个赞
这是两个问题:
如何以流畅的风格将潜在的可为空的值绑定到/?
StatementDatabaseClient如何让数据库计算出其余部分?
R2DBC 和 Spring Data R2DBC 通过要求将值绑定到或绑定 .没有方法可以接受可能为空的参数。这有两个原因:nullStatementnull
你应该处理可空性,以表明那里发生了什么。这是处理可为 null 的值的好习惯,而不是使处理隐式。的隐式本质是导致最多错误的原因。
nullnull数据库需要显式。带有占位符的参数化语句位于两个块的执行端:SQL 语句本身和参数绑定(描述符)。参数描述符需要与占位符、类型信息 (、 、 、 ...) 和实际值相关联。使用值进行调用时,驱动程序可以派生类型信息。绑定值时,驱动程序需要其他类型的信息。否则,我们无法执行查询。
VARCHARBITINTbind(…)null
话虽如此:
没有像
bindPotentiallyNull("auditId", entity.getTx().getId(), Integer.class)您无法在 SQL 查询中执行任何操作,因为绑定参数信息由辅助方法提供。
在谈论存储过程时,我们面临着类似的问题,因为存储过程需要有关输入/输出/输入输出参数的其他详细信息。我们讨论了潜在的包装器类型,例如
Parameters.in(@Nullable T value, Class<? super T> valueType)
所以这些可以用作包装器
bind("auditId", Parameters.in(entity.getTx().getId(), Integer.class))TA贡献1872条经验 获得超4个赞
可以使用如下所示的类设置值或 null:Parameter
import org.springframework.r2dbc.core.Parameter;
// rest of the code
.bind("customerId", Parameter.fromOrEmpty(o.getCustomerId(), UUID.class))
早些时候,它是 ,未被弃用。SettableValue.fromOrEmpty
添加回答
举报
