2012-03-02 1559 views
1

我需要匹配數據庫中的加密列。我需要傳遞加密的值作爲字節[]匹配。傳遞byte []的散列碼而不是存儲在byte []中的實際值。由於哈希代碼被傳遞,它不正確地匹配值。以下是我的查詢和Mapper.java中的函數調用。如何在MyBatis的sql查詢中傳遞byte []參數類型?

AccBalNotificationBean selectAccBalNotificationBean(@Param("acctIdByteArray") byte[] acctIdByteArray); 

SELECT toa.accounts_id from tbl_transactions_other_accounts toa WHERE other_account_number = #{acctIdByteArray} 

謝謝你的幫助。

回答

2

我假設你的other_account_number列的數據類型是字符串類型(char,varchar等)。 Mybatis默認會使用StringDataTypeHandler,並調用字節數組的.toString()方法。通過指定typeHandler,向MyBatis提示您希望使用數組的內容。

.. WHERE other_account_number = #{acctIdByteArray, typeHandler=org.apache.ibatis.type.ByteArrayTypeHandler} 
+0

這對我使用MySql和二進制列(UUIDs)。 有趣的是:在另一個使用不同數據庫引擎(MS SQL和jTDS驅動程序)的項目中,不需要指定'typeHandler = org.apache.ibatis.type.ByteArrayTypeHandler'。 jTDS驅動程序必須處理該轉換,而MySQL及其驅動程序不起作用。當我說它沒有,它不會返回任何結果。 – toddcscar 2017-07-15 04:40:25