最近、私は「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;
}
}
POJOは単純で、古いJava制限が削除されたBean。Java Beanは次の要件を満たしている必要があります。
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; }
}
POJO:-POJOは、Java言語仕様によって強制されるもの以外の制限によってバインドされていないJavaオブジェクトです。
POJOのプロパティ
POJOの例
public class POJO {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
POJOは Plain Old Java Object です。
私がリンクしたウィキペディアの記事から:
コンピューティングソフトウェアでは、POJOはPlain Old Java Objectの頭字語です。この名前は、特定のオブジェクトが特別なオブジェクトではなく、通常のJavaオブジェクトであり、特に Enterprise JavaBean ではないことを強調するために使用されます
あなたのクラスはすでにPOJOのようです。
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;
}
}
特定のフレームワーク、ORM、または特別な種類のクラスを必要とする他のシステムで動作するように特別に設計されたクラスを作成するために何もしていない場合、プレーンオールドJavaオブジェクト、またはPOJO。
皮肉なことに、この用語を作成した理由の1つは、賢明な場合には人々がそれらを避けていたことであり、一部の人々は、これは彼らが空想的な名前を持っていなかったためだと結論付けたということです。皮肉なことに、あなたの質問はこのアプローチが機能したことを示しているからです。
古いPOD "Plain Old Data"を比較して、C構造体ができないことを何も行わないC++クラス(多かれ少なかれ、デストラクタでも些細なコンストラクタでもない非仮想メンバが停止しないことを意味する) PODと見なされます)、および.NETの新しい(より直接比較可能な)POCO "Plain Old CLR Object".
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 + "]";
}
}
Martin Fowler による
この用語は、Rebecca Parsons、Josh MacKenzie、および私が2000年9月の会議での講演の準備中に造られました。講演では、ビジネスロジックを通常のJava =エンティティBeanを使用するのではなくオブジェクト。システムで通常のオブジェクトを使用することに反対する理由を疑問に思い、単純なオブジェクトには派手な名前がなかったためだと結論付けました。
通常、POJOは制限に拘束されず、JavaオブジェクトはPOJOと呼ぶことができますが、いくつかの指示があります。明確に定義されたPOJOは以下の指示に従う必要があります。
そして、Java Language Specificationによると、POJOは
ただし、開発者とフレームワークは、永続性、宣言的なトランザクション管理などの機能を実装するために、事前に指定された注釈を使用する必要があると説明します。したがって、注釈が追加される前にオブジェクトが削除しても、POJOと見なすことができます。
JavaBeanは、シリアライズ可能な特別な種類のPOJOであり、引数のないコンストラクタを持ち、単純な命名規則に従うゲッターメソッドとセッターメソッドを使用してプロパティにアクセスできます。
マッピングには主に3つのオプションがあります
Pojoクラスを使用している間、開発者はデータベースと簡単にマッピングできます。 POJOクラスはデータベース用に作成され、同時に値オブジェクトクラスは、コンテンツを簡単に保持するゲッターメソッドとセッターメソッドで作成されます。
そのため、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;
}
}