2010-08-20 39 views
53

Recientemente comencé a escuchar acerca de "POJOs" (Plain Old Java Objects). Lo busqué en Google, pero todavía no entiendo bien el concepto. ¿Alguien puede darme una descripción clara de un POJO?¿Cómo crear un POJO?

Considere una clase "Persona" con variables "id, nombre, dirección, salario" - ¿cómo crearía un POJO para este escenario? ¿El código está debajo de un 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; 
    } 
} 
+1

la salida mi respuesta a una pregunta similar: http://stackoverflow.com/questions/3392580/a-better-explanation-of-poco/3392625#3392625. Esto se refiere a POCO (versión .NET de POJOS), pero los fundamentos son los mismos. – RPM1984

+0

@Tamil me puedes explicar una vez más. sobre pojo –

+0

@ Poovizhirajan.N, disculpe la gran demora. de alguna manera lo perdí. –

Respuesta

65

Un POJO es simplemente un Java Bean simple y viejo con las restricciones eliminadas. Java Beans deben cumplir los siguientes requisitos:

  1. por defecto sin argumentos constructor
  2. siguen la convención de la haba de getFoo (o isFoo para booleanos) y los métodos para setFoo un atributo llamado foo mutable; dejar el setFoo si foo es inmutable.
  3. debe implementar java.io.Serializable

POJO no obliga a ninguno de estos. Es solo lo que dice su nombre: un objeto que se compila bajo JDK se puede considerar un Objeto Java Plain Old. Sin servidor de aplicaciones, sin clases base, no se requieren interfaces para usar.

El acrónimo POJO fue una reacción contra EJB 2.0, que requirió varias interfaces, clases base ampliadas y muchos métodos para hacer cosas simples. Algunas personas, Rod Johnson y Martin Fowler, se rebelaron contra la complejidad y buscaron la forma de implementar soluciones a escala empresarial sin tener que escribir EJB.

Martin Fowler acuñó un nuevo acrónimo.

Rod Johnson escribió "J2EE Without EJBs", escribió Spring, influenció bastante a EJB, por lo que la versión 3.1 se parece mucho a Spring e Hibernate, y obtuvo una dulce IPO de VMWare.

Aquí hay un ejemplo que se puede envolver alrededor de su cabeza:

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

Nunca más tendré esta duda. Gracias. –

+7

Algunas personas pueden entender las demostraciones prácticas más rápido que leyendo. Yo soy uno de ellos. –

+0

Entiendo. Yo puedo ser de esa manera, también. Editaré mi respuesta. – duffymo

4

A POJO es un Plain Old Java Object.

del artículo de Wikipedia he vinculado a:

En el software de computación, POJO es un acrónimo para Plain Old Java Object. El nombre se usa para enfatizar que un objeto dado es un objeto de Java ordinaria, no un objeto especial, y en particular no un Enterprise JavaBean

Su clase parece ser ya un POJO.

+1

Oye, también encontré el wiki. Pero necesito una explicación práctica hombre ... –

2

Cuando no está haciendo nada para que su clase esté especialmente diseñada para funcionar con un marco, ORM u otro sistema dado que necesita un tipo especial de clase, tiene un Objeto Java Plain Old, o POJO.

Irónicamente, una de las razones para acuñar el término es que la gente los evitaba en los casos en que eran razonables y algunas personas concluyeron que esto era porque no tenían un nombre elegante. Irónico, porque tu pregunta demuestra que el enfoque funcionó.

Compara el antiguo POD "Plain Old Data" para referirse a una clase de C++ que no hace nada que C struct no pueda hacer (más o menos, los miembros no virtuales que no son destructores o constructores triviales don ' para evitar que se lo considere POD), y el POCO más nuevo (y más directamente comparable) "Objeto CLR sencillo antiguo" en .NET.

+0

Gracias por su respuesta senior. Pero quiero una explicación práctica. –

+0

¿Desea una explicación práctica de la nomenclatura para "no especial"? De Verdad? –

4

actos de clase POJO como un grano que se utiliza para establecer y obtener el valor.

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

POJO: - POJO es un objeto de Java no limitado por ninguna otra restricción que las forzadas por la especificación de lenguaje de Java.

Propiedades de POJO

  1. Todas las propiedades deben ser colocador pública y métodos getter
  2. Todas las variables de instancia deben ser privadas
  3. no se deben extender las clases pre-especificados.
  4. No debería implementar interfaces preespecificadas.
  5. No debe contener anotaciones preespecificadas.
  6. Puede que no tiene ningún constructores de argumentos

Ejemplo de POJO

public class POJO { 

    private String value; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 
} 
+0

# 1, # 2 contradice la definición en wikipedia. https://en.wikipedia.org/wiki/Plain_Old_Java_Object#Definition. Estás describiendo un "POJO de JavaBean" (un término que considero un oxímoron, pero así soy yo) – Nilzor

1

Existen principalmente son posibles tres opciones para el propósito de mapeo

  1. serializar
  2. asignación XML
  3. Cartografía POJO. (Plain Old Java Obje cts)

Al utilizar las clases pojo, es fácil para un desarrollador mapear con la base de datos. Las clases POJO se crean para la base de datos y al mismo tiempo las clases de objetos de valor se crean con métodos getter y setter que contendrán el contenido fácilmente.

Por lo tanto, para el mapeo entre Java con la base de datos, se implementan objetos de valor y clases POJO.

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

¿Por qué tienes el método de igual uso? También es POJO lo mismo que getters y setters? –

0
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; 
     } 
    } 
Cuestiones relacionadas