ΠάρηςΓ Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 Γεια σας παίδες... Οι προβληματισμοί μου ειναι κυρίως θεωριτικοί. Και πραγματικά εχω μπερδευτεί. Αν υποθεσουμε οτι δουλεύω σε java server pages. Ποιος ειναι ο καλυτερος τροπος να παίρνω δεδομένα απο τη βάση; Βεβαια απο οσο ξερω ο πατροπαράδοτος τρόπος να φτιαχνω νεα συνδεση για καθε request και να εχω μια κλάση μαπερ ειναι λιγο πασέ.. Καμια ιδέα;Εχω κοιταξει διαφορα .Οπως hibernate,persitence κτλ αλλαπολυ χαμός
Cue Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 Επί της ουσίας υλοποιείς το MVC pattern. Mε λίγα/απλά λόγια τι λέει. Θα φτιάξεις μία κλάση για κάθε πίνακα που έχεις με τα αντίστοιχα attributes. π.χ. > mysql> desc persons; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(25) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) Model > public class Person { private Integer id; private String name; //getters-setters } Μετά ένα DAO για κάθε κλάσση > public class PersonDAO { private Connection con; PersonDAO(Connection con) { this.con = con; } public List<Person> list(){ //select statement } public void persist(Person p){ //insert statement } } *Καλό θα ήταν αντί για Connnection να περνάς ένα DataSource (λεπτομέριες inside). Ρίξε και μία ματιά στο dbutils. Controller Ο Servlet δέχεται το request από το JSP και χρησιμοποιεί το DAO για να πάρει τα Person(s) > PersonDAO dao = ... List<Person> persons = dao.list(); request.setAttribute("persons", persons); View Το JSP θα φτιάχνει την html με βάσει τα Person(s) που θα του επιστρέφει ο Servlet > <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:forEach val='person' items='${requestScope.persons}'> ${person.name} </c:forEach> Κατα τα άλλα, πολύ διάβασμα. *Bare in mind ότι πλέον η ποιο ενδεδειγμένη λύση θα ήταν να χρησιμοποιήσεις JPA. Βέβαια πρώτα μαθαίνεις να περπατάς και μετά να πετάς
ΠάρηςΓ Δημοσ. 23 Ιουνίου 2009 Μέλος Δημοσ. 23 Ιουνίου 2009 Εχω υλοποιήσει πράγματα σε DAO αλλά τοσα που είδα οτι υπάρχουν λέω τι συμβαίνει εδώ! Καμια φορά ειναι λιγο προβλημα βέβαια το DAO. Εάν έχεις απο μια φόρμα κάποια δεδομένα ξέρεις τρόπο να καταχωρούνται αμέσως σε μια κλάση και όχι να πρέπει να γράφεις Person.setname(request.getattribute("name")); κτλ... Πολύ απλά δε νομίζω να γίνεται. Εκτός αν εχεις ενα hashmap πιστεύω ωστε να μπαίνουν εύκολα με ενα loop αλλα και πάλι λογικά θα πρέπει να κανεις καποιους ελεγχους. Μου την εσπαγε που επρεπε στο DAO να περνάω καθε φορα μια σύνδεση και είδα οτι αλλα προγραματα δε το κάναν. Ετσι χρησιμοποίησα connection pooling αλλα δε ξερω ποσο αξιοπιστο είναι. (tomcat server).. Τωρα αυτο το το persistence αφου λες οτι ειναι καλυτερο θα το κοιτάξω... Περιπου τι κάνει; Ευχαριστώ παντως
Cue Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 ξέρεις τρόπο να καταχωρούνται αμέσως σε μια κλάση και όχι να πρέπει να γράφεις Person.setname(request.getattribute("name")); κτλ... > [url="http://commons.apache.org/beanutils/v1.8.0/apidocs/org/apache/commons/beanutils/PropertyUtils.html#copyProperties(java.lang.Object,%20java.lang.Object)"]PropertyUtils.html#copyProperties(java.lang.Object,%20java.lang.Object)[/url] Μου την εσπαγε που επρεπε στο DAO να περνάω καθε φορα μια σύνδεση και είδα οτι αλλα προγραματα δε το κάναν. Ετσι χρησιμοποίησα connection pooling αλλα δε ξερω ποσο αξιοπιστο είναι. (tomcat server).. Συγνώμμη αλλά σε αυτό που λες δεν βλέπω καμμία λογική. Εφόσον η εφαρμογή σου όντως έχει ανάγκη από connection pooling, τότε θα χρησιμοποιήσεις το DataSource όπως ανέφερα. Το να το περνάς σε κάθε DAO δεν είναι παράλογο. Ξεκίνα να διαβάζεις και Misko (Hevery), κάνει καλό. Dependency Injection Myth: Reference Passing Breaking the Law of Demeter is Like Looking for a Needle in the Haystack
ΠάρηςΓ Δημοσ. 23 Ιουνίου 2009 Μέλος Δημοσ. 23 Ιουνίου 2009 Το να φτιάχνεις εννοω για κάθε request μια νεα συνδεση το θεωρούσα ενοχλιτικό και το να πρέπει να περνας την connection στο DAO κάθε φορά
alex2005 Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Θα σου πρότεινα να ρίξεις μία ματιά στο Hinernate. Και κάνει handle τα connection σου αλλά και κάνει το mapping των objects στην ΒΔ.
ΠάρηςΓ Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 Θα τα κοιτάξω και ευχαριστώ... Εχω μια χαζή απορία παίδες... Χρησιμοποιώ datasource για να πάρω συνδεση απο pool.Πρέπει να κλείνω τη σύνδεση μολις τελειωση η δουλειά η όχι; Σερβερ tomcat. ---------- Το μήνυμα προστέθηκε στις 05:42 ---------- Διοτι σε κατι ajax που έκανα σε κάποια φάση κολλησε ο σερβερ μάλλον δεν έδινε αλλες συνδέσεις πιστευω ο sql
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.