In questo momento ho un programma java le cui classi sono attualmente POJO e memorizzate nella memoria volatile. Questi devono essere persistenti. A quanto ho capito, due scelte popolari sono JDO e Java Persistence API. Per qualcuno che sa poco di SQL, Torque, ecc. Qual è il modo più semplice per aggiungere persistenza ai dati del mio programma?Qual è il modo più semplice per mantenere oggetti java?
risposta
Il modo tradizionale di serializzare sul filesystem è utilizzare Java Serialisation. Tuttavia è necessario implementare Serializable ovunque.
Una soluzione più semplice consiste nel serializzare in XML (e quindi eseguire il dump nel file system) utilizzando XStream. Non è necessario implementare alcuna interfaccia e la maggior parte di tutte le serializzazioni e deserializzazioni senza ulteriori interventi. È possibile personalizzare ulteriormente la serializzazione, se necessario. L'unico problema che abbia mai avuto è serializzazione di una classe interna, senza serializzazione intenzionalmente la classe esterna che contiene (questo è dovuto al implicita this
riferimento)
Serializzare gli oggetti nel file system se non si conoscono database SQL o relazionali.
Dovrai imparare JDBC per usare JDO, JPA, Hibernate o qualsiasi altra cosa. A meno che i tuoi POJO non siano complessi, ti consiglio di iniziare da lì e di iniziare a lavorare.
Assicurati di conoscere la normalizzazione e la corretta progettazione degli indici.
Per utilizzare JDO, JPA o Hibernate, non è necessario conoscere JDBC poiché questo è il punto di tali API.Usano JDBC sotto le copertine quando persistono in RDBMS, in modo che la complessità sia nascosta da te – DataNucleus
Non sono d'accordo - non è consigliabile usarli senza conoscere JDBC. La complessità è nascosta, ma è un'astrazione che perde. – duffymo
Non un'astrazione che perde con JDO, anche se certamente JPA e Hibernate sono fortemente legati a JDBC. Dipende da quale API l'interrogante decide di andare – DataNucleus
Sembra che si desideri mantenere un DB. Tuttavia, per evitare le complessità di un DB una soluzione semplice per persistere POJO al file system è serializzarli su un documento XML. L'API Java 1.6 include il framework JAXB trovato nel pacchetto javax.xml.bind. Per utilizzare JAXB si essenzialmente annotazione tuo POJO e creare maresciallo e unmarshalling metodi in questo modo:
@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();
}
}
}
Diciamo che persistono un'istanza di Foo dove mBar è 42, allora questa soluzione produrrebbe un file XML in questo modo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo>
<Bar>42</Bar>
</Foo>
DataNucleus nasconde l'intero marshalling e unmarshalling all'utente e aggiunge semplicemente annotazioni JDO o JPA alle classi che desidera mantenere. Meno codice Meno da gestire – DataNucleus
Il modo più semplice mi sono imbattuto finora è db4o:
ObjectContainer db = Db4o.openFile(location);
db.store(myObject);
List<MyObject> myObjects = db.query(MyObject.class);
In più ci sono modi davvero interessanti di interrogare in altri modi.
Purtroppo: nell'ottobre 2014, Actian ha rifiutato di continuare a perseguire e promuovere attivamente l'offerta di prodotti commerciali db4o per i nuovi clienti. http://supportservices.actian.com/versant/default.html – Jonathan
Se la serializzazione è un'opzione, è consigliabile utilizzare un'API di prevalenza come prevalayer o Space4J (più recente). Informazioni sulla prevalenza degli oggetti:
Prevalence è un concetto iniziato da Klaus Wuestefeld su come memorizzare i dati in modo orientato agli oggetti reali, utilizzando solo snapshot di memoria, registri delle transazioni e serializzazione.
Controllare this article per ulteriori informazioni su questo argomento (ulteriori informazioni su Google).
Space4j offre anche cluster e indicizzazione trasparenti. – TraderJoeChicago
DataNucleus è il modo più semplice in quanto fornisce le API JDO e JPA per la persistenza in quasi tutti i tipi di archivio dati che si vorrebbe. Perché scrivere tutto il codice JAXB in una delle altre risposte quando DataNucleus lo fa per te? Il tutto supportato dagli standard Java
- 1. WinForms: qual è l'approccio più semplice per mantenere alcuni dati?
- 2. C#: qual è il modo più semplice per sottrarre tempo?
- 3. Qual è il modo più semplice per combinare più raccolte in uno stream in Java?
- 4. Qual è il modo più semplice per confrontare due oggetti google :: protobuf :: Message tra loro?
- 5. Il modo più semplice per ordinare l'elenco degli oggetti
- 6. Qual è il modo più semplice per generare un client Java da un WSDL codificato RPC
- 7. Qual è il modo più semplice per chiamare una funzione del kernel di Windows da Java?
- 8. Qual è il modo più semplice per impostare i messaggi di dati binari personalizzati in Java?
- 9. Qual è il modo più semplice per ordinare le mappe in base ai valori in Java?
- 10. Qual è il modo più semplice per implementare Scala PartialFunction in Java?
- 11. Un modo più semplice per mantenere aggiornato un ramo git
- 12. Qual è il modo più semplice per analizzare JSON in Scala?
- 13. Qual è il modo migliore per dividere due oggetti TimeSpan?
- 14. Qual è il modo più semplice per creare un sito web per la prenotazione degli appuntamenti?
- 15. Qual è il modo più semplice per rimuovere tutti gli attributi da un XML in C#?
- 16. Qual è il modo più semplice per convertire questo documento XML nel mio oggetto?
- 17. Qual è il modo Pythonic per implementare un semplice FSM?
- 18. Qual è il modo più semplice per esporre sottofunzioni del file M per il test dell'unità?
- 19. qual è il modo più semplice per proteggere con password il database mongodb per l'utente remoto?
- 20. Qual è il modo migliore per organizzare più sottoview?
- 21. Qual è il cloud più semplice per contenuto Web statico
- 22. Qual è il modo più semplice per effettuare più richieste Web di seguito?
- 23. Il modo più semplice per mantenere una struttura dati in un file in python?
- 24. Qual è il modo più efficiente per ordinare un NSSet?
- 25. Qual è il modo più semplice per analizzare i numeri in clojure?
- 26. Qual è il modo più semplice/veloce per scoprire quando è stato creato un ramo git?
- 27. Qual è il modo più semplice in C# per convalidare se un'espressione regolare è ben formata?
- 28. Qual è il modo più semplice per dire se una grammatica BNF è ambigua o no?
- 29. Qual è il modo più semplice per leggere diversi ints da stdin se è ok fallire?
- 30. Qual è il modo più semplice per rinominare il file che stai modificando in Vim?
Per tutto ciò che è (dis) santo, resta il più lontano possibile da Torque. – ChssPly76