Как создать POJO?

Недавно я начал слышать о «POJO» («Обычные старые объекты Java»). Я googled это, но все еще не понимаю концепцию хорошо. Может ли кто-нибудь дать мне четкое описание POJO?

Рассмотрим class «Человек» с переменными «id, name, address, pay» – как я могу создать POJO для этого сценария? Является ли код ниже 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; } } 

POJO – это простой, старый Java Bean с удаленными ограничениями. Java Beans должен удовлетворять следующим требованиям:

  1. Конструктор no-arg по умолчанию
  2. Следуйте за соглашением Bean метода getFoo (или isFoo for booleans) и setFoo для изменяемого атрибута с именем foo; оставьте поле setFoo, если foo является неизменным.
  3. Необходимо реализовать java.io.Serializable

POJO не предусматривает ни одного из них. Это именно то, что говорит название: объект, который компилируется под JDK, можно рассматривать как обычный Java-объект Plain. Нет сервера приложений, нет базовых classов, нет интерфейсов, необходимых для использования.

Аббревиатура POJO была реакцией на EJB 2.0, которая требовала нескольких интерфейсов, расширенных базовых classов и множества методов просто для простых вещей. Некоторые из них, Род Джонсон и Мартин Фаулер среди них, восстали против сложности и искали способ реализовать решения масштаба предприятия без необходимости писать EJB.

Мартин Фаулер придумал новый акроним.

Род Джонсон написал «J2EE Without EJBs», написал «Spring», так сильно повлиял на EJB, поэтому версия 3.1 очень похожа на Spring и Hibernate, и из него вышла милая IPO от VMWare.

Вот пример, который вы можете обернуть вокруг:

 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; } } 

POJO: POJO – это объект Java, не связанный никакими ограничениями, кроме тех, которые были вызваны спецификацией Java Language.

Свойства POJO

  1. Все свойства должны быть общедоступными и с использованием метода getter
  2. Все переменные экземпляра должны быть приватными
  3. Не следует расширять заданные classы.
  4. Не следует выполнять заданные интерфейсы.
  5. Не должно содержать заранее определенных аннотаций.
  6. У него могут не быть конструкторов аргументов

Пример POJO

 public class POJO { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } } 

POJO – это простой старый Java-объект .

Из статьи Википедии я связан с:

В вычислительном программном обеспечении POJO является аббревиатурой для обычного Java-объекта Plain. Имя используется, чтобы подчеркнуть, что данный объект является обычным Java-объектом, а не специальным объектом, и в частности не Enterprise JavaBean

Ваш class, похоже, уже является POJO.

Класс POJO действует как компонент, который используется для установки и получения значения.

 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; } } 

Если вы не делаете ничего, чтобы ваш class был специально разработан для работы с определенной структурой, ORM или другой системой, которая нуждается в специальном classе, у вас есть обычный объект Java Java или POJO.

Как это ни парадоксально, одна из причин того, что люди используют этот термин, заключается в том, что люди избегали их в тех случаях, когда они были разумными, а некоторые люди пришли к выводу, что это произошло потому, что у них не было причудливого имени. Иронично, потому что ваш вопрос показывает, что подход работал.

Сравните более старые POD «Обычные старые данные», чтобы означать C ++-class, который не делает ничего, что C-структура не могла бы сделать (более или менее, не виртуальные члены, которые не являются деструкторами или тривиальными конструкторами, не останавливают его рассматриваемый POD) и более новый (и более непосредственно сопоставимый) POCO «Обычный объект CLR» в .NET.

в основном для целей сопоставления возможно три варианта

  1. сериализации
  2. Отображение XML
  3. POJO-сопоставление (простые старые объекты Java)

При использовании classов pojo разработчику легко сопоставляться с базой данных. Классы POJO создаются для базы данных, и в то же время classы объектов значений создаются с помощью методов getter и setter, которые легко удерживают содержимое.

Таким образом, для сопоставления между Java с базой данных реализованы объекты-объекты и classы POJO.

 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 + "]"; } } 

По словам Мартина Фаулера

Этот термин был придуман, в то время как Ребекка Парсонс, Джош Маккензи и я готовились к разговору на конференции в сентябре 2000 года. В разговоре мы указывали на многие преимущества кодирования бизнес-логики в обычных Java-объектах, а не на использовании Entity Beans. Мы задавались вопросом, почему люди так против использования обычных объектов в своих системах и пришли к выводу, что это потому, что простые объекты не имели причудливого имени. Таким образом, мы дали им один, и он пойман очень красиво.

Как правило, POJO не привязан к каким-либо ограничениям, и любой объект Java можно назвать POJO, но есть некоторые направления. Четко определенный POJO должен следовать нижеуказанным направлениям.

  1. Каждая переменная в POJO должна быть объявлена ​​как закрытая.
  2. Конструктор по умолчанию должен быть переопределен с общедоступной доступностью.
  3. Каждая переменная должна иметь свой метод Setter-Getter с общедоступной доступностью.
  4. Обычно POJO должен переопределять методы equals (), hashCode () и toString () объекта (но это не обязательно).
  5. Переопределить метод compare () интерфейса Comparable, используемый для сортировки (желательно, но не обязательно).

И согласно спецификации языка Java, POJO не должен

  1. Расширение предварительно заданных classов
  2. Внедрить предварительно определенные интерфейсы
  3. Содержат предварительно заданные annotations

Однако разработчики и фреймворки описывают, что POJO по-прежнему требует использования предустановленных аннотаций для реализации таких функций, как персистентность, декларативное управление транзакциями и т. Д. Таким образом, идея состоит в том, что если объект был POJO до добавления каких-либо комментариев, он возвращался бы к статусу POJO, если annotations удаляется, то он все равно может считаться POJO.

JavaBean – это особый вид POJO, который является Serializable, имеет конструктор без аргументов и позволяет получить доступ к свойствам с использованием методов getter и setter, которые следуют простому соглашению об именах.

Подробнее об объекте Old Object Java (POJO) .

 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; } } 
Interesting Posts

Может ли быть потеря данных на жестком диске из-за перераспределенных секторов?

mongodb перемещает документы из одной коллекции в другую коллекцию

Как убить процесс зомби на mac

jqgrid изменить значение ячейки и оставаться в режиме редактирования

Строка ggplot2 дает «geom_path: каждая группа состоит только из одного наблюдения. Вам нужно настроить группу эстетики? “

Переключить «Перерыв при вызове исключения». Использование макроса или комбинации клавиш

tomcat-dbcp vs commons-dbcp

Android Studio – processDebugResources не удалось

Реализация комментариев и комментариев в базе данных

Как читать файл из относительного пути в проекте Java? java.io.File не может найти указанный путь

Световая библиотека Unicode

Является ли Java «pass-by-reference» или «pass-by-value»?

Как использовать Selenium в C #?

Как фильтровать стек вызовов в представлении отладки Eclipse для Java

Использование хеша MD5 в строке в cocoa?

Давайте будем гением компьютера.