web-dev-qa-db-ja.com

POJOを作成する方法は?

最近、私は「POJO」(Plain Old Java Objects))について聞き始めました。私はそれをグーグルで調べましたが、それでも概念をよく理解していません。 ?

変数「id、name、address、salary」を持つクラス「Person」を考えてみてください。このシナリオの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;
    }
}
64
user405398

POJOは単純で、古いJava制限が削除されたBean。Java Beanは次の要件を満たしている必要があります。

  1. デフォルトの引数なしのコンストラクタ
  2. Fooという名前の可変属性のgetFoo(またはブール値のisFoo)およびsetFooメソッドのBean規則に従います。 fooが不変の場合は、setFooを省略します。
  3. Java.io.Serializableを実装する必要があります

POJOはこれらのいずれも強制しません。名前のとおりです。JDKでコンパイルするオブジェクトは、Plain Old Java Object。アプリサーバー、ベースクラス、インターフェースを使用する必要はありません。

POJOという頭字語は、EJB 2.0に対する反応であり、単純なことを行うためだけにいくつかのインターフェース、拡張された基本クラス、および多くのメソッドが必要でした。 Rod JohnsonとMartin Fowlerの一部の人々は、複雑さに反抗し、EJBを作成せずにエンタープライズスケールのソリューションを実装する方法を探しました。

マーティン・ファウラーは新しい頭字語を作り出しました。

Rod Johnsonは「EJBなしのJ2EE」を書き、Springを書き、EJBに十分な影響を与えたため、バージョン3.1はSpringやHibernateのように見え、VMWareから甘いIPOを取得しました。

頭を包むことができる例はここにあります:

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

POJO:-POJOは、Java言語仕様によって強制されるもの以外の制限によってバインドされていないJavaオブジェクトです。

POJOのプロパティ

  1. すべてのプロパティはpublic setterおよびgetterメソッドである必要があります
  2. すべてのインスタンス変数はプライベートである必要があります
  3. 事前に指定されたクラスを拡張しないでください。
  4. 事前に指定されたインターフェイスを実装しないでください。
  5. 事前に指定された注釈を含めるべきではありません。
  6. 引数コンストラクタがない場合があります

POJOの例

public class POJO {

    private String value;

    public String getValue() {
         return value;
    }

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

POJOは Plain Old Java Object です。

私がリンクしたウィキペディアの記事から:

コンピューティングソフトウェアでは、POJOはPlain Old Java Objectの頭字語です。この名前は、特定のオブジェクトが特別なオブジェクトではなく、通常のJavaオブジェクトであり、特に Enterprise JavaBean ではないことを強調するために使用されます

あなたのクラスはすでにPOJOのようです。

5
Blair Conrad

POJOクラスは、値を設定および取得するために使用されるBeanとして機能します。

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
Subodh

特定のフレームワーク、ORM、または特別な種類のクラスを必要とする他のシステムで動作するように特別に設計されたクラスを作成するために何もしていない場合、プレーンオールドJavaオブジェクト、またはPOJO。

皮肉なことに、この用語を作成した理由の1つは、賢明な場合には人々がそれらを避けていたことであり、一部の人々は、これは彼らが空想的な名前を持っていなかったためだと結論付けたということです。皮肉なことに、あなたの質問はこのアプローチが機能したことを示しているからです。

古いPOD "Plain Old Data"を比較して、C構造体ができないことを何も行わないC++クラス(多かれ少なかれ、デストラクタでも些細なコンストラクタでもない非仮想メンバが停止しないことを意味する) PODと見なされます)、および.NETの新しい(より直接比較可能な)POCO "Plain Old CLR Object".

2
Jon Hanna
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

Martin Fowler による

この用語は、Rebecca Parsons、Josh MacKenzie、および私が2000年9月の会議での講演の準備中に造られました。講演では、ビジネスロジックを通常のJava =エンティティBeanを使用するのではなくオブジェクト。システムで通常のオブジェクトを使用することに反対する理由を疑問に思い、単純なオブジェクトには派手な名前がなかったためだと結論付けました。

通常、POJOは制限に拘束されず、JavaオブジェクトはPOJOと呼ぶことができますが、いくつかの指示があります。明確に定義されたPOJOは以下の指示に従う必要があります。

  1. POJOの各変数はプライベートとして宣言する必要があります。
  2. デフォルトのコンストラクターは、パブリックアクセシビリティーでオーバーライドする必要があります。
  3. 各変数には、パブリックアクセス可能なSetter-Getterメソッドが必要です。
  4. 通常、POJOはObjectのequals()、hashCode()、toString()メソッドをオーバーライドする必要があります(必須ではありません)。
  5. ソートに使用されるComparableインターフェースのcompare()メソッドをオーバーライドします(必須ですが必須ではありません)。

そして、Java Language Specificationによると、POJOは

  1. 事前に指定されたクラスを拡張する
  2. 事前に指定されたインターフェースを実装する
  3. 事前に指定された注釈を含む

ただし、開発者とフレームワークは、永続性、宣言的なトランザクション管理などの機能を実装するために、事前に指定された注釈を使用する必要があると説明します。したがって、注釈が追加される前にオブジェクトが削除しても、POJOと見なすことができます。

JavaBeanは、シリアライズ可能な特別な種類のPOJOであり、引数のないコンストラクタを持ち、単純な命名規則に従うゲッターメソッドとセッターメソッドを使用してプロパティにアクセスできます。

Plain Old Java Object(POJO)Explained

1
Naresh Joshi

マッピングには主に3つのオプションがあります

  1. シリアライズ
  2. XMLマッピング
  3. POJOマッピング。(Plain Old Java Objects)

Pojoクラスを使用している間、開発者はデータベースと簡単にマッピングできます。 POJOクラスはデータベース用に作成され、同時に値オブジェクトクラスは、コンテンツを簡単に保持するゲッターメソッドとセッターメソッドで作成されます。

そのため、Javaデータベースとの間にマッピングするために、値オブジェクトとPOJOクラスが実装されます。

1
mohit sarsar
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