2009-12-23 28 views
7

Ngay bây giờ tôi có chương trình java có các lớp hiện đang POJO và được lưu trữ trong bộ nhớ dễ bay hơi. Những thứ này cần được duy trì. Như tôi đã hiểu, hai lựa chọn phổ biến là JDO và Java Persistence API. Đối với những người biết rất ít về SQL, Mô-men xoắn, vv, đó là cách dễ nhất để thêm sự kiên trì vào dữ liệu của chương trình của tôi?Cách dễ nhất để duy trì các đối tượng java là gì?

+3

Đối với tất cả mọi thứ là (un) thánh, ở xa như mô-men xoắn như bạn có thể. – ChssPly76

Trả lời

7

Cách truyền thống để nối tiếp với hệ thống tệp là sử dụng Java Serialisation. Tuy nhiên, bạn cần triển khai Serializable ở mọi nơi.

Một giải pháp đơn giản hơn là nối tiếp với XML (và sau đó đổ vào hệ thống tệp) bằng cách sử dụng XStream. Bạn không cần phải thực hiện bất kỳ giao diện, và hầu hết mọi thứ serialize và deserialises mà không cần can thiệp thêm. Bạn có thể tùy chỉnh thêm serialization nếu cần. Vấn đề duy nhất mà tôi từng có được serialising một lớp bên trong mà không cố ý serialising các lớp bên ngoài chứa (điều này là do sự this tham khảo ngầm)

6

Sắp xếp lại các đối tượng vào hệ thống tệp nếu bạn không biết cơ sở dữ liệu SQL hoặc cơ sở dữ liệu quan hệ.

Bạn sẽ phải học JDBC để sử dụng JDO, JPA, Hibernate hoặc bất kỳ thứ gì khác. Trừ khi POJO của bạn cực kỳ phức tạp, tôi khuyên bạn nên bắt đầu từ đó và làm việc theo cách của bạn.

Đảm bảo bạn tìm hiểu về cách chuẩn hóa và thiết kế chỉ mục phù hợp.

+0

Để sử dụng JDO, JPA hoặc Hibernate bạn rõ ràng không cần biết JDBC vì đó là điểm của các API đó.Họ sử dụng JDBC dưới các bìa khi kiên trì với RDBMS, vì vậy sự phức tạp đó bị ẩn khỏi bạn – DataNucleus

+3

Tôi không đồng ý - không nên sử dụng chúng mà không biết JDBC. Sự phức tạp là ẩn, nhưng nó là một trừu tượng bị rò rỉ. – duffymo

+1

Không phải là một trừu tượng bị rò rỉ với JDO, mặc dù chắc chắn JPA và Hibernate được gắn chặt với JDBC. Tùy thuộc vào API mà người hỏi quyết định đi – DataNucleus

2

Có vẻ như bạn có thể muốn tồn tại trong DB. Tuy nhiên, để tránh sự phức tạp của một DB, một giải pháp đơn giản để duy trì POJO cho hệ thống tệp là tuần tự hóa chúng thành một tài liệu XML. API Java 1.6 bao gồm khung công tác JAXB được tìm thấy trong gói javax.xml.bind. Để sử dụng JAXB bạn về cơ bản chú thích POJO của bạn và tạo soái và unmarshal phương pháp như vậy:

@XmlRootElement(name="Foo") 
public class Foo { 

    @XmlElement(name="Bar") 
    public int mBar; 

    public static void marshal(Foo foo, OutputStream out) IOException {  
     try { 
     JAXBContext jc = JAXBContext.newInstance(Foo.class); 
     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(qaConfig, out); 
     } 
     catch (JAXBException ex) { 
     throw new IOException(ex); 
     } 
     finally { 
     out.close(); 
     } 
    } 

    public static Foo unmarshal(InputStream in) throws IOException { 

     try { 
     JAXBContext jc = JAXBContext.newInstance(Foo.class); 
     Unmarshaller unmarshaller = jc.createUnmarshaller(); 

     return (Foo)unmarshaller.unmarshal(in); 
     } 
     catch (JAXBException ex) { 
     throw new IOException(ex); 
     } 
     finally { 
     in.close(); 
     } 
    } 
} 

phép nói rằng bạn tồn tại một thể hiện của Foo nơi mbar là 42 sau đó giải pháp này sẽ tạo ra một file XML như sau:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Foo> 
    <Bar>42</Bar> 
</Foo> 
+1

DataNucleus che giấu tất cả sự sắp xếp và sắp xếp lại từ người dùng và họ chỉ cần thêm chú thích JDO hoặc JPA vào các lớp mà họ muốn tồn tại. Ít mã hơn. Ít để xử lý – DataNucleus

5

Cách đơn giản nhất tôi đi qua như được nêu ra là db4o:

ObjectContainer db = Db4o.openFile(location); 
db.store(myObject); 
List<MyObject> myObjects = db.query(MyObject.class); 

Plus có những cách thực sự tốt để truy vấn theo những cách khác.

+0

Đáng buồn thay: Vào tháng 10 năm 2014, Actian đã từ chối tiếp tục tích cực theo đuổi và quảng bá sản phẩm thương mại cho sản phẩm db4o cho khách hàng mới. http://supportservices.actian.com/versant/default.html – Jonathan

5

Nếu tuần tự hóa là một tùy chọn, hãy xem xét sử dụng API phổ biến như prevalayer hoặc Space4J (gần đây hơn). Về sự phổ biến đối tượng:

Tỷ lệ là một khái niệm được bắt đầu bởi Klaus Wuestefeld về cách lưu trữ dữ liệu theo cách hướng đối tượng thực, chỉ sử dụng ảnh chụp nhanh bộ nhớ, nhật ký giao dịch và tuần tự hóa.

Kiểm tra this article để tìm hiểu thêm về chủ đề này (chi tiết trên Google).

+3

Space4j cũng cung cấp cụm và chỉ mục trong suốt. – TraderJoeChicago

2

DataNucleus là cách dễ nhất vì nó cung cấp các API JDO và JPA cho sự tồn tại lâu dài đối với bất kỳ loại kho dữ liệu nào bạn muốn. Tại sao viết tất cả mã JAXB đó vào một trong các câu trả lời khác khi DataNucleus thực hiện nó cho bạn? Tất cả được hỗ trợ bởi các tiêu chuẩn Java

Các vấn đề liên quan