Προς το περιεχόμενο

Βάσεις Δεδομένων και Web Εφαρμογές


ΠάρηςΓ

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παίδες...

Οι προβληματισμοί μου ειναι κυρίως θεωριτικοί.

Και πραγματικά εχω μπερδευτεί.

Αν υποθεσουμε οτι δουλεύω σε java server pages.

Ποιος ειναι ο καλυτερος τροπος να παίρνω δεδομένα απο τη βάση;

Βεβαια απο οσο ξερω ο πατροπαράδοτος τρόπος να φτιαχνω νεα συνδεση για καθε request και να εχω μια κλάση μαπερ ειναι λιγο πασέ..

Καμια ιδέα;Εχω κοιταξει διαφορα .Οπως hibernate,persitence κτλ αλλαπολυ χαμός

Δημοσ.

Επί της ουσίας υλοποιείς το 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. Βέβαια πρώτα μαθαίνεις να περπατάς και μετά να πετάς :)

Δημοσ.

Εχω υλοποιήσει πράγματα σε DAO αλλά τοσα που είδα οτι υπάρχουν λέω τι συμβαίνει εδώ!

Καμια φορά ειναι λιγο προβλημα βέβαια το DAO.

Εάν έχεις απο μια φόρμα κάποια δεδομένα ξέρεις τρόπο να καταχωρούνται αμέσως σε μια κλάση και όχι να πρέπει να γράφεις

Person.setname(request.getattribute("name")); κτλ...

Πολύ απλά δε νομίζω να γίνεται. Εκτός αν εχεις ενα hashmap πιστεύω ωστε να μπαίνουν εύκολα με ενα loop αλλα και πάλι λογικά θα πρέπει να κανεις καποιους ελεγχους.

Μου την εσπαγε που επρεπε στο DAO να περνάω καθε φορα μια σύνδεση και είδα οτι αλλα προγραματα δε το κάναν. Ετσι χρησιμοποίησα connection pooling αλλα δε ξερω ποσο αξιοπιστο είναι. (tomcat server)..

Τωρα αυτο το το persistence αφου λες οτι ειναι καλυτερο θα το κοιτάξω... Περιπου τι κάνει;

Ευχαριστώ παντως

Δημοσ.
ξέρεις τρόπο να καταχωρούνται αμέσως σε μια κλάση και όχι να πρέπει να γράφεις

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), κάνει καλό. :D

 

Dependency Injection Myth: Reference Passing

Breaking the Law of Demeter is Like Looking for a Needle in the Haystack

Δημοσ.

Το να φτιάχνεις εννοω για κάθε request μια νεα συνδεση το θεωρούσα ενοχλιτικό και το να πρέπει να περνας την connection στο DAO κάθε φορά

Δημοσ.

Θα σου πρότεινα να ρίξεις μία ματιά στο Hinernate.

Και κάνει handle τα connection σου αλλά και κάνει το mapping των objects στην ΒΔ.

Δημοσ.

Θα τα κοιτάξω και ευχαριστώ...

Εχω μια χαζή απορία παίδες...

Χρησιμοποιώ datasource για να πάρω συνδεση απο pool.Πρέπει να κλείνω τη σύνδεση μολις τελειωση η δουλειά η όχι;

Σερβερ tomcat.

 

---------- Το μήνυμα προστέθηκε στις 05:42 ----------

 

Διοτι σε κατι ajax που έκανα σε κάποια φάση κολλησε ο σερβερ μάλλον δεν έδινε αλλες συνδέσεις πιστευω ο sql

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...