Datenbankabfragen werden in RapidClipse standardmäßig in einer Data Access Schicht (Projektmanagement > Data Access) durchgeführt und dadurch von UI, Entities und Business Logik getrennt.
Standard-Methoden im DAO
Abfragen aller Datensätze bezogen auf das verwendende DAO-Objekt - .findAll();
List<Customer> allCustomers = new CustomerDAO().findAll(); for (Customer customer : allCustomers) { ... }
Abfragen eines bestimmten Objektes über den Primärschlüssel - .find(Object primaryKey)
Customer specificCustomer = new CustomerDAO().find("SHG"); String contactname = specificCustomer.getContactname();
Liefert eine Liste an Objekten zurück welche auf das übergebene Beispiel passen - .findByExample(Class entity, Object example)
ACHTUNG: Auch Standardwerte wie 0 oder "" (leer String) fließen in die Prüfung mit ein, alle Werte sollten also mit null vorbelegt seinCustomer exampleCustomer = new Customer(); exampleCustomer.setCity("Musterhausen"); exampleCustomer.setContacttitle("Herr"); List<Customer> findByExample = new CustomerDAO().findByExample(Customer.class, exampleCustomer);
Manuelles abbrechen der Transaktion mit anschließenden RollBack - .rollback()
new CustomerDAO().rollback();
Speichern von Angelegten Entities - .save(Object entity)
Customer exampleCustomer = new Customer(); exampleCustomer.setCity("Musterhausen"); exampleCustomer.setContacttitle("Herr"); Customer savedCustomer = new CustomerDAO().save(exampleCustomer);
oder
Customer exampleCustomer2 = new Customer(); exampleCustomer2.setCity("Musterhausen2"); Customer exampleCustomer3 = new Customer(); exampleCustomer3.setCity("Musterhausen3"); Customer exampleCustomer4 = new Customer(); exampleCustomer4.setCity("Musterhausen4"); Customer savedCustomer = new CustomerDAO().save(exampleCustomer2, exampleCustomer3, exampleCustomer4);
Erstellen von eigenen Methoden im DAO welche beim Aufrufen eine Abfrage an die Datenbank schicken und das Ergebnis zurück liefern
Abfrage aller Objekte einer Tabelle (natives SQL Statement)
public List<Customer> getAllCustomerNativeSQL() { String SQL = "SELECT * FROM CUSTOMER"; Query nativeQuery = em().createNativeQuery(SQL, Customer.class); List<Customer> resultList = nativeQuery.getResultList(); return resultList; }
Abfrage mit Parametern (natives SQL Statement)
public List<Customer> getCustomersByFirstAndLastname(String lastname, String firstname) { String SQL = "SELECT * FROM CUSTOMER WHERE Lastname LIKE ? AND Firstname LIKE ?"; Query nativeQuery = em().createNativeQuery(SQL, Customer.class); nativeQuery.setParameter(1, lastname); nativeQuery.setParameter(2, firstname); List<Customer> resultList = nativeQuery.getResultList(); return resultList; }
Abfrage eines einzelnen Objektes (natives SQL Statement)
public Customer getCustomersByID(Integer ID) { String SQL = "SELECT * FROM CUSTOMER WHERE ID = ?"; Query nativeQuery = em().createNativeQuery(SQL, Customer.class); nativeQuery.setParameter(1, ID); Customer singleResult = (Customer) nativeQuery.getSingleResult(); return singleResult; }