Hibernate is een framework die het mogelijk maakt een database aan een applicatie te koppelen.
Het handige van Hibernate is dat je er makkelijk een andere database aan kan hangen, zonder al te veel code in je applicatie te hoeven wijzigen.
Het aanspreken van Hibernate blijft namelijk hetzelfde.
Hibernate maakt het mogelijk om data op te halen of op te slaan in een database, dat afkomstig is van een applicatie.
Hibernate zet deze data om naar SQL om zo met de database te kunnen communiceren.
Hibernate is a powerful, high performance object/relational persistence and query service. Hibernate lets you develop persistent classes following object-oriented idiom - including association, inheritance, polymorphism, composition, and collections. Hibernate allows you to express queries in its own portable SQL extension (HQL), as well as in native SQL, or with an object-oriented Criteria and Example API.
Unlike many other persistence solutions, Hibernate does not hide the power of SQL from you and guarantees that your investment in relational technology and knowledge is as valid as always. The LGPL open source license allows the use of Hibernate and NHibernate in open source and commercial projects.
Bron: https://www.hibernate.org/
Voorbeeld projecttoepassing.
In het project GAMS van projectgroep HANWorks is gebruikt gemaakt van Hibernate.Hibernate wordt aangeroepen door de backend van de applicatie, welke is geprogrammeerd met Java.
Eerst is er een XML file aangemaakt waarin onder andere de server, username en password worden toegekend:
<persistence-unit name="hanworksgams" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://hanworks.xoxie.net/gams"/> <property name="hibernate.connection.username" value="hanworks"/> <property name="hibernate.connection.password" value="ddoa1234"/> <property name="hibernate.bytecode.provider" value="javassist"/> </properties> </persistence-unit>
Daarna is er in de code een Entitymanager aangemaakt, en wel als volgt:
EntityManagerFactory fact = Persistence.createEntityManagerFactory("hanworksgams"); EntityManager em = fact.createEntityManager(); em.getTransaction().begin(); em.persist(object); em.getTransaction().commit(); em.close(); fact.close(); em = null; fact = null;
Hier is te zien dat er een Factory aan wordt gemaakt die er voor zorgt dat de Entitymanager aangemaakt kan worden.Het is goed te zien dat de naam "hanworksgams" wordt meegegeven, welke overeenkomt met de <persistence-unit name> uit de XML persistence file.
Vervolgens wordt de Entitymanager aangemaakt.
Daarna wordt de transactie voor de Entitymanager gestart, en wordt het bedoelde object meegegeven aan de transactie.
Hierna wordt de transactie naar de manager gestuurd die het verder afhandelt. Daarna worden de Entitymanager en de Factory afgesloten en weer leeggemaakt.
Om informatie uit de database halen maken we gebruik van query’s, zoals bijvoorbeeld hieronder:
EntityManagerFactory fact = Persistence.createEntityManagerFactory("hanworksgams"); EntityManager em = fact.createEntityManager(); List<Country> countryList = em.createQuery("from Country where id = " + id).getResultList(); em.close(); fact.close(); em = null; fact = null;
Hier is te zien dat er wederom een Entitymanager aan wordt gemaakt, en dat deze een query gaat creëren om een lijst op te halen van de Landen aan de hand van een query.Daarna worden de Entitymanager en de Factory weer netjes gesloten en leeggemaakt.