2012-03-02 75 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