2 回答

TA貢獻1995條經(jīng)驗 獲得超2個贊
這是兩個問題:
如何以流暢的風(fēng)格將潛在的可為空的值綁定到/?
Statement
DatabaseClient
如何讓數(shù)據(jù)庫計算出其余部分?
R2DBC 和 Spring Data R2DBC 通過要求將值綁定到或綁定 .沒有方法可以接受可能為空的參數(shù)。這有兩個原因:null
Statement
null
你應(yīng)該處理可空性,以表明那里發(fā)生了什么。這是處理可為 null 的值的好習(xí)慣,而不是使處理隱式。的隱式本質(zhì)是導(dǎo)致最多錯誤的原因。
null
null
數(shù)據(jù)庫需要顯式。帶有占位符的參數(shù)化語句位于兩個塊的執(zhí)行端:SQL 語句本身和參數(shù)綁定(描述符)。參數(shù)描述符需要與占位符、類型信息 (、 、 、 ...) 和實際值相關(guān)聯(lián)。使用值進行調(diào)用時,驅(qū)動程序可以派生類型信息。綁定值時,驅(qū)動程序需要其他類型的信息。否則,我們無法執(zhí)行查詢。
VARCHAR
BIT
INT
bind(…)
null
話雖如此:
沒有像
bindPotentiallyNull("auditId", entity.getTx().getId(), Integer.class)
您無法在 SQL 查詢中執(zhí)行任何操作,因為綁定參數(shù)信息由輔助方法提供。
在談?wù)摯鎯^程時,我們面臨著類似的問題,因為存儲過程需要有關(guān)輸入/輸出/輸入輸出參數(shù)的其他詳細(xì)信息。我們討論了潛在的包裝器類型,例如
Parameters.in(@Nullable T value, Class<? super T> valueType)
所以這些可以用作包裝器
bind("auditId", Parameters.in(entity.getTx().getId(), Integer.class))

TA貢獻1872條經(jīng)驗 獲得超4個贊
可以使用如下所示的類設(shè)置值或 null:Parameter
import org.springframework.r2dbc.core.Parameter;
// rest of the code
.bind("customerId", Parameter.fromOrEmpty(o.getCustomerId(), UUID.class))
早些時候,它是 ,未被棄用。SettableValue.fromOrEmpty
添加回答
舉報