DATE : 2006/05/31 (Wed)
少し前までいろいろと忙しく、「東北大学未来科学技術共同研究センター川島隆太教授監修 脳を鍛える大人の DS トレーニング」も一週間ほどプレイできませんでした。
今日は少し余裕があったので、脳トレの「計算100」をプレイしてみました(´∀`)
が、70問目あたりからペンさばきがあやしくなり、脳内もだんだんモヤモヤと…… orz
結果、最後にトレーニングした時よりも30秒も遅くなっていました orz
(;´Д`)ただでさえ計算が遅い(新幹線級と自動車級の境界あたり)ので、これはかなり致命的です
(;^ω^)明日からまた、真面目にトレーニングしようかと思います。
DATE : 2006/05/30 (Tue)
(前回の記事)
表名がクラス名と異なる場合
前回の記事では、 Person クラスを Person 表に関係付ける例を示しました。
それでは、Person クラスを person_table 表に関係付けたい場合はどうなるでしょうか。
Table アノテーションを使うと、クラスを関係付ける表を指定することができます。Table アノテーションは、クラス宣言の前に付加します。
Table アノテーションの例を以下に示します。「<表名>」の部分を関係付ける表名に置き換えます。
@Table(name="<表名>")
上に挙げた Person クラスを、 person_table 表に関連付ける場合のコードを以下に示します。
(import 文は省略)
@Entity
@Table(name="person_table")
public class Person {
int id;
String name;
int age;
public Person() { }
public void setId(int id) {
this.id = id;
}
@Id
public int getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
(つづきます)
DATE : 2006/05/29 (Mon)
プロパティの定義方法
以下の形式のメソッドを定義すると、プロパティを定義できます。
なお、<PropertyType> はプロパティの型、<PropertyName> はプロパティ名です。また、設定用のメソッドの引数名は自由です。
メソッドに書くプロパティ名の先頭は大文字です。
読み取り用 | public <PropertyType> get<PropertyName>() |
---|---|
書き込み用 | public void set<PropertyName>(<PropertyType> arg) |
上記のメソッドを両方定義すると、読み取り書き込み可能 (read-write) プロパティ、前者しかない場合は読み取り専用 (read-only) プロパティ、後者しかない場合は書き込み専用 (write-only) プロパティになります。
なお、<PropertyType> が boolean 型の場合は、以下の形式でもプロパティが定義されます。
読み取り用 | public <PropertyType> is<PropertyName>() |
---|---|
書き込み用 | public void set<PropertyName>(<PropertyType> arg) |
読み取り用のメソッド名の先頭が get から is に変わっただけです。
プロパティの定義の例を以下に示します。
(import 宣言やメソッドの中身などは省略)
// date プロパティ(読み出し書き込み可能)
public Date getDate() { ... }
public void setDate(Date date) { ... }
// age プロパティ(読み出し専用)
public int getAge() { ... }
// list プロパティ(書き込み専用)
public void setList(List list) { ... }
// human プロパティ(読み出し専用)
public boolean isHuman() { ... }
なお、メソッドの中身は自由です。つまり、そのプロパティに相当するフィールドの値を操作してもよいですし、他の値を操作しても問題ありません。
プロパティ名
上の例で見たように、メソッド名には get や is の直後の文字を大文字で書きます。しかし、実際のプロパティ名は、その文字を小文字にした文字列となります。
例えば、getHoge のプロパティ名は hoge となります。
ただし、getURL などの、get や is の直後の次の文字も大文字の場合は、直後の文字は小文字に変わりません。
つまり、getURL のプロパティ名は URL となります。
参考文献
DATE : 2006/05/28 (Sun)
(前回の記事)
簡単な例
次の項目からなる表を、単純にクラスで表現してみます。
表の名前は、「Person」とします。
- id(整数、プライマリーキー)
- name(文字列)
- age(整数)
(import 文は省略)
public class Person {
int id;
String name;
int age;
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
これで、 Person を生成するクラスができました。
しかし、これだけでは O/R マッピングを行えません。
前回の記事で示したように、Entity クラスにするための条件を満たさなければなりません。
上の例では、Entity アノテーションが付加されていません。また、引数なしのコンストラクタも用意されていません。そして、プライマリーキーを表すプロパティには Id アノテーションを付加しなければなりません。
以上のことを踏まえて、上の例を修正します。
(import 文は省略)
@Entity
public class Person {
int id;
String name;
int age;
public Person() { }
public void setId(int id) {
this.id = id;
}
@Id
public int getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
これで、Person が O/R マッピングできるようになりました。
(つづきます)