我正在使用hibernate来存储和检索MySQL数据库中的数据.我使用的是字节数组,但遇到了SerialBlob类.我可以成功使用该类,但我似乎无法找到使用SerialBlob和字节数组之间的任何区别.有没有人知道你希望使用byte []的SerialBlob inlue的基本差异或可能的情况?
解决方法:
你是对的,SerialBlob只是一个字节[]的精简抽象,但是:
>你在团队工作吗?
>你有时会犯错误吗?
>你在写评论时懒惰吗?
>您有时会忘记一年前的代码实际上是什么吗?
如果您使用yes来解决上述任何问题,则应该使用SerialBlob.
它与围绕简单数据结构(例如,想想ByteBuffer)或其他类的任何其他抽象基本相同.你想在byte []上使用它,因为:
>它更具描述性. byte []可能是某种缓存,它可能是循环缓冲区,可能是某种完整性检查机制出错了.但是如果你使用SerialBlob,很明显这只是来自数据库的二进制数据块/存储在数据库中.
您可以在类上使用方法,而不是手动数组处理,如果您不知道代码,则再次更容易阅读.您的代码的读者必须理解简单的数组操作.具有良好名称的方法是自描述的.
当您在一年内阅读此代码时,这对您的队友和您也很有帮助.
>这是更多的错误证明.每次你编写任何新代码时,你都很有可能犯了一个错误.它起初可能不可见,但它可能在那里. SerialBlob代码已经过全球数千人的测试,可以肯定地说,你不会得到任何与之相关的错误.
即使你确定你的字节数组处理正确,因为它是如此简单,如果其他人在半年内找到你的代码并开始“优化”的事情呢?如果他重复使用旧的blob,或者用你的魔法阵列填充物搞砸了怎么办?索引操作中的每一个逐个错误都会破坏您的数据并且可能无法立即检测到(您正在编写单元测试,不是吗?).
>它限制您只有少数可能的互动.这实际上可能看起来像是一个缺点,但事实并非如此!它确保您在完成后不会将blob用作本地临时变量.它确保您不会尝试使用它或任何愚蠢的字符串.它确保你只将它用作blob.再次,清晰和安全.
>它已经写好了,看起来总是一样的.您不必为每个项目编写新的实现,也不必在十个不同的项目中读取十个不同的实现.如果您在任何人的项目中都看到过SerialBlob,那么您的使用情况将会很明确.每个人都使用同一个.
TL; DR:几年前(或者可能还在C中),使用byte []就可以了.在Java(以及一般的OOP)中,尝试使用为作业而不是原始(低级)结构设计的特定类,因为它更清楚地描述了您的意图,产生更少的错误并从长远来看减少了代码的长度.
标签:java,mysql,hibernate