Quali sono i vantaggi di myBatis rispetto a Hibernate? [chiuso]

31

Ho svolto alcune ricerche per conto mio e ho compreso il concetto di base. Ma alcuni approfondimenti possono essere acquisiti solo attraverso l'esperienza effettiva.

Quali sono i vantaggi di myBatis che valgono la pena di imparare un nuovo framework?
In tal caso, eviteresti di usarlo?

    
posta Kshitiz Sharma 25.07.2012 - 06:40
fonte

5 risposte

37

Pensa a cosa stai cercando di ottenere. In genere, Segregazione risposta query comandi il modello funziona bene per domini complessi.

Il motivo è che stai provando a fare una di queste due cose in genere:

  1. Crea / Aggiorna / Elimina alcune entità di dominio complesse
  2. Esegui query di recupero analitico (ad esempio query di sommazione / aggregazione)

Hibernate funziona bene per il caso 1, consentendo di creare un POJO e mantenerlo / aggiornarlo. Lo fa anche rapidamente, a meno che il tuo dominio non sia abbastanza grande.

myBatis è ottimo per le query di recupero (caso 2) in cui desideri solo una risposta. Hibernate tenterebbe di caricare l'intero grafico dell'oggetto e avresti bisogno di iniziare a sintonizzare le query con trucchi LazyLoading per mantenerlo funzionante su un dominio di grandi dimensioni. Questo è importante quando si eseguono query analitiche complesse che non restituiscono nemmeno oggetti entità. Hibernate offre in questo caso solo SqlQuery e Transformers bean con enormi tipi predefiniti come BigDecimal, mentre myBatis potrebbe facilmente mappare a una semplice entità non-POJO.

Questi due casi sono la differenza tra Comandi in cui si desidera modificare i dati del dominio e Risposte dove si desidera recuperare alcuni dati.

Quindi, considera questi due casi e ciò che fa la tua applicazione. Se hai un dominio semplice e recuperi le informazioni, usa myBatis. Se hai un dominio complesso e le entità persistono, usa Hibernate. Se fai entrambe le cose, considera un approccio ibrido. Questo è quello che usiamo nel nostro progetto che ha migliaia di entità per tenerlo sotto controllo. ;)

    
risposta data 26.03.2013 - 16:10
fonte
19

MyBatis è SQL centric. È in grado di chiamare le istruzioni SQL e di mappare i risultati (tabelle) sugli alberi oggetto.

Il vantaggio principale è che non è un ORM. Non esegue il mapping delle tabelle all'oggetto, quindi non subisce la mancata corrispondenza di impedenza di orm. Si adatta bene a database complessi o legacy o per utilizzare funzionalità DB come stored procedure, viste e così via.

È abbastanza semplice e facile da apprendere, quindi si adatta anche ai team meno esperti perché non è necessario avere tra loro un guru dell'ibernazione.

Dai un'occhiata a jpetstore 6 link

    
risposta data 25.07.2012 - 19:00
fonte
5

Poiché la domanda si riferisce a il mio commento , ecco cosa avevo in mente di scriverlo.

Prima di tutto, è derivato dal contesto della tua domanda originale. In altre circostanze potrei dare un consiglio diverso. Il punto che mi ha suggerito MyBatis è questo:

...we encountered some performance problems.

We decided to drop hibernate in favor of plain Jdbc to gain database performance...

In uno dei progetti precedenti, il nostro team ha preso in considerazione l'idea di trasferirsi da Hibernate per i motivi che descrivi. Simile a te, stavamo per passare a JDBC, ma i colleghi di un altro progetto ci hanno consigliato MyBatis. Il team ha deciso di fare un tentativo, mantenendo JDBC come opzione di fallback nel caso in cui le cose andassero male.

In quel momento, non sapevo nulla di MyBatis ma avevo abbastanza esperienza con JDBC per essere sicuro che avrebbe fatto il lavoro. Nonostante ciò, ho sostenuto con forza l'idea di provare MyBatis, la ragione principale è che, secondo la mia esperienza passata, la quantità di codice boilerplate che avremmo dovuto scrivere con JDBC sarebbe stata scoraggiante.

  • Per essere onesti, mi piace JDBC perché è semplice da capire, affidabile e dà una buona sensazione di controllo sull'interazione del database, ma il prezzo che si paga è davvero alto. Le mie dita iniziano a dolere ogni volta che ricordo quanto sia stato necessario scrivere una piastra calda con JDBC.

Comunque, abbiamo provato MyBatis e ha funzionato come pubblicizzato. Ecco perché ho scritto il commento che mi chiedi.

Nel caso in cui se ti aspetti che fornisca una panoramica dettagliata della tecnologia, o in qualche modo elogiate la sua superiorità - mi spiace di non poterlo fare. Se potessi, lo scriverei già in una risposta separata alla tua domanda originale, invece di dare un breve commento. Ho accennato che non sapevo nulla di MyBatis all'epoca - beh, ne ho ancora poche conoscenze scusate. La transizione da Hibernate è stata eseguita da altri membri del team e non ha avuto alcun impatto sul codice su cui ho lavorato. Ho solo ricordato i key-takeaway (in base ai quali ho fatto il mio commento), ovvero che 1) MyBatis ha risolto i problemi che avevamo con Hibernate, 2) non ha introdotto problemi e 3) ci ha permesso di evitare di scrivere codice I di codice mi aspettavo nel caso in cui passiamo a JDBC. Questo è tutto.

    
risposta data 25.07.2012 - 23:07
fonte
3

Hibernate è ben noto per troppa magia , comportamento inaspettato e grande curva di apprendimento. Ci sono altri framework là fuori che sono più focalizzati sulla semplicità e ti permetteranno di avere il controllo.

myBatis è uno di questi, il mio progetto MentaBean è un altro. Ho scritto un post sul blog a proposito di ciò che potrebbe essere di aiuto.

    
risposta data 15.11.2012 - 06:48
fonte
-1

Ho usato Hibernate per un progetto di caricamento e trasformazione dati 5 anni fa usando Hibernate 3 e ho pensato che fosse meraviglioso. Sto facendo una piccola applicazione di e-commerce e ho provato ad usare Hibernate 4 e sono rimasto estremamente deluso. Hanno rimosso gli strumenti e sono strettamente integrati con l'IDE. Ho provato MyBatis e ho fatto tutto il lavoro in una sola notte e sono molto contento di quanto sia facile integrarlo in un'applicazione. Penso che Hibernate sia diventato troppo gonfio e che a questo punto avrei usato EJB 3 su Hibernate.

    
risposta data 13.02.2014 - 21:32
fonte

Leggi altre domande sui tag