【问题标题】:Is it possible to persist POJOs with JDBC?是否可以使用 JDBC 持久化 POJO?
【发布时间】:2012-11-18 13:57:54
【问题描述】:

愚蠢的问题:我想知道是否可以像使用 JPA 一样使用 JDBC 持久化 POJO?

假设我有一个包含一个字段的类“A”

public class A implements Serializable{

    public String someString = "asd";
}

现在假设我有一个 A (A myA = new A();) 的实例。

我的问题是:是否可以使用 JDBC 保留“myA”,或者我是否必须保留字符串。或者当我想加载“myA”时,我可以加载实例“myA”还是必须通过加载字符串来构建“myA”并使用加载的字符串创建一个新的实例表单A。

【问题讨论】:

    标签: java jpa jdbc pojo persist


    【解决方案1】:

    您可以将序列化的 Java 对象存储到数据库中;例如通过使用 Blob 类型。

    但这通常不是一个好主意:

    • 执行 SQL 查询以任何重要的方式测试序列化对象的状态是不切实际的。

    • 序列化对象往往对对象代码的更改很敏感。处理这个问题可能会很尴尬,不处理它会在数据库中留下无法再反序列化的序列化对象。

    如果您想将 POJO 持久化到关系数据库,最好使用对象-关系映射,例如 JPA 或 Hibernate。

    【讨论】:

      【解决方案2】:

      您必须以某种方式进行映射(在持久化和检索之前)。

      一种方法是创建我喜欢调用 fillX 的方法,您可以在其中手动进行映射(java 代码)或创建某种约定,例如类中的名称和 DB 中的列。

      例如,这在Spring JDBC 中做得很好。在文档中,您可以看到谁做了什么。

      在大多数情况下,使用 JPA 之类的对象关系映射是可行的方法,但这并不总是一种选择。

      【讨论】:

        【解决方案3】:

        一般而言,您可以使用 JDBC 持久化字节流。在这种情况下,您应该使用 BLOB(如果它是文本流,则使用 CLOB)。

        所以如果你的 A 类真的实现了 Serializable 接口,你可以将它序列化成字节流并存储。

        但是,我仍然建议您改为存储字符串。 这是因为使用 BLOB/CLOB 比使用字符串要慢得多。

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2010-10-27
          • 1970-01-01
          • 2013-08-25
          • 1970-01-01
          • 2020-04-14
          • 2020-05-24
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多