Jak stworzyć POJO?

Ostatnio zacząłem słyszeć o "POJOs" (zwykłych starych obiektach Javy). Wygooglowałem to, ale nadal nie rozumiem dobrze pojęcia. Czy ktoś może mi podać dokładny opis POJO?

Rozważ klasę "Person" ze zmiennymi "id, name, address, Pension" - jak stworzyć POJO dla tego scenariusza? Czy kod jest pod POJO?

public class Person {
    //variables
    People people = new People();
    private int id;
    private String name;
    private String address;
    private int salary;


    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public int getSalary() {
        return salary;
    }

    public void setId() {
        this.id = id;
    }

    public void setName() {
        this.name = name;
    }

    public void setAddress() {
        this.address = address;
    }

    public void setSalary() {
        this.salary = salary;
    }
}
 61
Author: RAnders00, 2010-08-20

9 answers

POJO to zwykła, stara fasola Java z usuniętymi ograniczeniami. Java Beans musi spełniać następujące wymagania:

  1. Default no-ARG constructor
  2. postępuj zgodnie z konwencją Bean getFoo (lub isFoo dla booleans) i metod setFoo dla zmiennego atrybutu o nazwie foo; zostaw setFoo, jeśli foo jest niezmienne.
  3. musi zaimplementować java. io. Serializable

POJO nie upoważnia do żadnego z nich. Tak mówi nazwa: obiekt, który kompiluje się pod JDK można uznać za zwykły stary obiekt Javy. Nie wymaga serwera aplikacji, klas bazowych ani interfejsów.

Akronim POJO był reakcją na EJB 2.0, która wymagała kilku interfejsów, rozszerzonych klas bazowych i wielu metod, aby robić proste rzeczy. Niektórzy ludzie, wśród nich Rod Johnson i Martin Fowler, zbuntowali się przeciwko złożoności i szukali sposobu na wdrożenie rozwiązań na skalę korporacyjną bez konieczności pisania EJB.

Martin Fowler ukuł nowy akronim.

Rod Johnson napisał "J2EE bez EJB", napisał Spring, wpłynął na EJB na tyle, że Wersja 3.1 wygląda bardzo podobnie jak Spring i Hibernate, i dostał słodki IPO od VMWare z niego.

Oto przykład, który możesz zawinąć w głowę:

public class MyFirstPojo
{
    private String name;

    public static void main(String [] args)
    {
       for (String arg : args)
       {
          MyFirstPojo pojo = new MyFirstPojo(arg);  // Here's how you create a POJO
          System.out.println(pojo); 
       }
    }

    public MyFirstPojo(String name)
    {    
        this.name = name;
    }

    public String getName() { return this.name; } 

    public String toString() { return this.name; } 
}
 71
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 01:05:47

POJO: - POJO jest obiektem Javy Nie związanym żadnymi ograniczeniami innymi niż wymuszone przez specyfikację języka Java.

Właściwości POJO

  1. wszystkie właściwości muszą być publiczne metody setter i getter
  2. wszystkie zmienne instancji powinny być prywatne
  3. nie powinny rozszerzać wcześniej określonych klas.
  4. nie powinien implementować predefiniowanych interfejsów.
  5. nie powinna zawierać predefiniowanych adnotacji.
  6. może nie mieć żadnego argumentu konstruktorzy

Przykład POJO

public class POJO {

    private String value;

    public String getValue() {
         return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
 24
Author: Md Azaharuddin Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 22:27:07

A POJO to zwykły stary obiekt Java.

Z artykułu Wikipedii, do którego podlinkowałem:

W oprogramowaniu komputerowym POJO jest akronim dla zwykłego starego obiektu Java. Na nazwa jest używana dla podkreślenia, że dany obiekt jest zwykłym obiektem Javy, Nie przedmiot specjalny, a w szczególności nie Enterprise JavaBean

Twoja klasa wydaje się być już POJO.

 4
Author: Blair Conrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 00:06:35

Klasa POJO działa jak fasola, która jest używana do ustawiania i uzyskiwania wartości.

public class Data
{


private int id;
    private String deptname;
    private String date;
    private String name;
    private String mdate;
    private String mname;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDeptname() {
        return deptname;
    }

    public void setDeptname(String deptname) {
        this.deptname = deptname;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMdate() {
        return mdate;
    }

    public void setMdate(String mdate) {
        this.mdate = mdate;
    }

    public String getMname() {
        return mname;
    }

    public void setMname(String mname) {
        this.mname = mname;
    }
}
 4
Author: Subodh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-13 10:54:31

Kiedy nie robisz nic, aby Twoja klasa była specjalnie zaprojektowana do pracy z danym frameworkiem, ORM lub innym systemem, który potrzebuje specjalnej klasy, masz zwykły stary obiekt Java, lub POJO.

Jak na ironię, jednym z powodów ukucia tego terminu jest to, że ludzie unikali ich w przypadkach, gdy byli rozsądni, a niektórzy doszli do wniosku, że to dlatego, że nie mieli wymyślnej nazwy. Ironiczne, bo twoje pytanie pokazuje, że podejście zadziałało.

Porównaj starsze POD "Plain Old Data" do klasy C++, która nie robi niczego, czego struktura C nie mogłaby zrobić (mniej więcej, nie-wirtualne elementy, które nie są destruktorami lub trywialnymi konstruktorami, nie przestają być uważane za POD), a nowsze (i bardziej bezpośrednio porównywalne) POCO "Plain Old CLR Object" w .NET.

 2
Author: Jon Hanna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 00:11:50

W celu mapowania możliwe są głównie Trzy opcje

  1. serialize
  2. mapowanie XML
  3. mapowanie POJO.(Plain Old Java Objects)

Podczas korzystania z klas pojo, programista może łatwo mapować z bazą danych. Klasy POJO są tworzone dla bazy danych i jednocześnie klasy value-objects są tworzone przy użyciu metod getter i setter, które z łatwością utrzymają zawartość.

Tak więc, w celu mapowania pomiędzy Javą a bazą danych, value - obiekty i klasy POJO są zaimplementowane.

 1
Author: mohit sarsar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 12:11:05
import java.io.Serializable;

public class Course implements Serializable {

    protected int courseId;
    protected String courseName;
    protected String courseType;

    public Course() {
        courseName = new String();
        courseType = new String();
    }

    public Course(String courseName, String courseType) {
        this.courseName = courseName;
        this.courseType = courseType;
    }

    public Course(int courseId, String courseName, String courseType) {
        this.courseId = courseId;
        this.courseName = courseName;
        this.courseType = courseType;
    }

    public int getCourseId() {
        return courseId;
    }

    public void setCourseId(int courseId) {
        this.courseId = courseId;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCourseType() {
        return courseType;
    }

    public void setCourseType(String courseType) {
        this.courseType = courseType;
    }

    @Override
    public int hashCode() {
        return courseId;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj != null || obj instanceof Course) {
            Course c = (Course) obj;
            if (courseId == c.courseId && courseName.equals(c.courseName)
                    && courseType.equals(c.courseType))
                return true;
        }
        return false;
    }

    @Override
    public String toString() {
        return "Course[" + courseId + "," + courseName + "," + courseType + "]";
    }
}
 1
Author: Abdullah Sarfaraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-15 03:36:26

Według Martina Fowlera

Termin zostaĹ 'ukuty, gdy Rebecca Parsons, Josh MacKenzie i ja przygotowywaliĺ" my siÄ ™ do prelekcji na konferencji we wrzeĹ " niu 2000 roku. W wykładzie zwracaliśmy uwagę na wiele korzyści płynących z kodowania logiki biznesowej do zwykłych obiektów java, a nie używania Entity Beans. Zastanawialiśmy się, dlaczego ludzie są tak przeciwni używaniu zwykłych obiektów w swoich systemach i doszliśmy do wniosku, że to dlatego, że proste obiekty nie mają wymyślnej nazwy. Więc daliśmy im jeden i ładnie się zaplątał.

Ogólnie rzecz biorąc, POJO nie jest związane z żadnym ograniczeniem i każdy obiekt Java można nazwać POJO, ale są pewne kierunki. Dobrze zdefiniowane POJO powinno postępować zgodnie z poniższymi wskazówkami.

  1. każda zmienna w POJO powinna być zadeklarowana jako prywatna.
  2. domyślny konstruktor powinien być nadpisany przy pomocy Public accessibility.
  3. każda zmienna powinna mieć swoją metodę Setter-Getter z publiczną dostępnością.
  4. ogólnie POJO powinno nadpisuje metody equals (), hashCode () i ToString () obiektu (ale nie jest to obowiązkowe).
  5. nadrzędna metoda compare () porównywalnego interfejsu używanego do sortowania (preferowana, ale nie obowiązkowa).

I zgodnie ze specyfikacją języka Java, POJO nie powinno

  1. Extend pre-specified classes
  2. zaimplementuj wstępnie określone interfejsy
  3. zawierają predefiniowane adnotacje

Jednak programiści i frameworki opisują POJO nadal wymaga użycia predefiniowanych adnotacji do implementacji funkcji takich jak trwałość, deklaratywne zarządzanie transakcjami itp. Chodzi o to, że jeśli obiekt był POJO przed dodaniem jakichkolwiek adnotacji powróci do stanu POJO, jeśli adnotacje zostaną usunięte, to nadal może być uważany za POJO.

JavaBean jest specjalnym rodzajem POJO, które jest Serializowalne, ma konstruktor bez argumentów i umożliwia dostęp do właściwości za pomocą metod getter i setter, które następują po prosta konwencja nazewnictwa.

Czytaj więcej na Plain Old Java Object (POJO) Explain.

 1
Author: Naresh Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-07 09:53:05
public class UserInfo {
        String LoginId;
        String Password;
        String FirstName;
        String LastName;
        String Email;
        String Mobile;
        String Address;
        String DOB;

        public String getLoginId() {
            return LoginId;
        }

        public void setLoginId(String loginId) {
            LoginId = loginId;
        }

        public String getPassword() {
            return Password;
        }

        public void setPassword(String password) {
            Password = password;
        }

        public String getFirstName() {
            return FirstName;
        }

        public void setFirstName(String firstName) {
            FirstName = firstName;
        }

        public String getLastName() {
            return LastName;
        }

        public void setLastName(String lastName) {
            LastName = lastName;
        }

        public String getEmail() {
            return Email;
        }

        public void setEmail(String email) {
            Email = email;
        }

        public String getMobile() {
            return Mobile;
        }

        public void setMobile(String mobile) {
            Mobile = mobile;
        }

        public String getAddress() {
            return Address;
        }

        public void setAddress(String address) {
            Address = address;
        }

        public String getDOB() {
            return DOB;
        }

        public void setDOB(String DOB) {
            this.DOB = DOB;
        }
    }
 0
Author: Gowtham Subramaniam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-23 06:09:47