69

最近、「POJO」(Plain Old Java Objects)について聞き始めました。私はそれをグーグルで検索しましたが、それでも概念をよく理解していません。誰かがPOJOの明確な説明を教えてもらえますか?

変数「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;
    }
}
4

11 に答える 11

83

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

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

POJOはこれらのいずれも義務付けていません。名前が示すとおりです。JDKでコンパイルされるオブジェクトは、Plain OldJavaObjectと見なすことができます。アプリサーバー、基本クラス、使用する必要のあるインターフェースはありません。

頭字語のPOJOは、EJB 2.0に対する反応であり、単純なことを行うためだけに、いくつかのインターフェイス、拡張された基本クラス、および多くのメソッドが必要でした。ロッドジョンソンやマーティンファウラーなどの一部の人々は、複雑さに反抗し、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; } 
}
于 2010-08-20T00:24:44.220 に答える
29

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

POJOのプロパティ

  1. すべてのプロパティは、パブリックセッターメソッドとゲッターメソッドである必要があります
  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;
    }
}
于 2014-01-24T09:41:10.663 に答える
5

POJOは、Plain OldJavaObjectです。

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

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

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

于 2010-08-20T00:06:35.567 に答える
4

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;
    }
}
于 2013-06-11T09:52:06.670 に答える
2

特定のフレームワーク、ORM、または特別な種類のクラスを必要とするその他のシステムで動作するように特別に設計されたクラスを作成するために何もしていない場合は、Plain Old Java Object(POJO)があります。

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

古いPOD「PlainOldData」を、C構造体が実行できなかったことを実行しないC ++クラスを意味するものと比較します(多かれ少なかれ、デストラクタまたは些細なコンストラクタではない非仮想メンバーは、それを停止しません) PODと見なされます)、および.NETの新しい(より直接的に比較可能な)POCO「PlainOldCLRObject」。

于 2010-08-20T00:11:50.080 に答える
2

マーティンファウラーによると

この用語は、2000年9月の会議でRebecca Parsons、Josh MacKenzieと私が講演の準備をしているときに造られました。講演では、エンティティBeanを使用するのではなくビジネスロジックを通常のJavaオブジェクトにエンコードすることの多くの利点を指摘しました。なぜ人々がシステムで通常のオブジェクトを使用することに反対しているのか疑問に思い、単純なオブジェクトには派手な名前がないためだと結論付けました。それで私たちは彼らに1つ与えました、そしてそれは非常にうまく捕らえられました。

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

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

また、Java言語仕様によれば、POJOは

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

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

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

プレーンオールドJavaオブジェクト(POJO)の説明についてもっと読む。

于 2018-08-07T09:53:05.200 に答える
1

マッピングの目的で可能な主に3つのオプションがあります

  1. シリアライズ
  2. XMLマッピング
  3. POJOマッピング(プレーンオールドJavaオブジェクト)

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

したがって、Javaとデータベースの間のマッピングを目的として、値オブジェクトとPOJOクラスが実装されます。

于 2014-05-27T11:53:09.013 に答える
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 + "]";
    }
}
于 2015-11-30T17:04:39.953 に答える
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;
        }
    }
于 2016-11-23T06:09:47.497 に答える
0
  1. File-setting-plugins-リポジトリを参照
  2. RoboPOJOGeneratorを検索してインストールし、AndroidStudioを再起動します
  3. プロジェクトを開き、JSONからPOJOを生成でパッケージ選択を右クリックします
  4. ダイアログボックスにJSONを貼り付け、要件に応じてオプションを選択します
  5. [生成]ボタンをクリックします
于 2020-05-05T08:02:08.203 に答える
0

クラスがフレームワークまたはライブラリから停止されていない場合、そのクラスから作成されたオブジェクトはPOJOとして認識されます。

いくつかの例を見てみましょう:

class MyServlet extends HttpServlet{
    //....
}

MyServletクラスの唯一の意味は、HttpServletクラスによって与えられます。したがって、MyServletから作成されたオブジェクトはPOJOではありません。

class MyClass implements Serializable{
    //...
}

Serializableインターフェースは、クラスMyClassに意味を与えません。したがって、MyClassから作成されたオブジェクトはPOJOです。

于 2021-12-13T05:11:41.193 に答える