2011-01-25 21 views
2

MyBatisを使用してデータベースに保存する非常に単純なオブジェクトグラフがあります。私が新しいオブジェクトグラフ(2つの詳細を持つBatisNode)を作成する場合、子オブジェクトが作成されることを確認するためのコードを書くにはどうすればよいですか?ここでは詳細は以下のとおりです。MyBatisに子オブジェクトを挿入する

 

public class BatisNode { 
    protected int id; 
    protected List details; 
    protected String name; 
     //Constructor and getters. 
} 

public class BatisNodeDetail { 
    protected int id; 
    protected BatisNode parent; 
    protected String name; 
     //Constructor and getters. 
} 
 

はスキーマ:

 
CREATE TABLE node (
    node_id int auto_increment primary key, 
    name varchar(255) 
); 

CREATE TABLE node_detail(
    node_detail_id int auto_increment primary key, 
    name varchar(255) 
); 

マッパー:

 
    
     
INSERT INTO node (
    name 
) 
SELECT #{name}; 
     

     
SELECT node_id id, 
name 
FROM node 
WHERE node_id=#{id}; 
     

     
     


答えて

4

のiBATIS/MyBatisのは、ORM、ちょうどDataMapperの、そのシンプル/制限がで特別に示していませんこれらのシナリオ(オブジェクトのグラフ):(基本的に)オブジェクトのグラフについてはわかりません。私は

:私が撮影した

一つのアプローチは、このある

  1. 軽量POJOオブジェクト( "DTOオブジェクト")の層は、それぞれがデータベーステーブル(一つのオブジェクトに対応

    < - > dbテーブルの一つのレコード)、彼らはあなたのBatisNodeとBatisNodeDetail例)のような(プロパティより少しを持って

  2. DAO層、データソースinjecte各DTO(たとえば、BatisNodeDAOとBatisNodeDetailDAO)ごとに1つのサービスオブジェクト標準的なサービスクラス(通常はシングルトン)を持つ以外にサービスレイヤーは重量級のオブジェクトもいくつか定義しています。( "ドメインオブジェクト(ドメインオブジェクト)"とも呼ばれます。 ")、これは対処し、通常はDTOオブジェクトのグラフに対応します(例ではBatisNodeWithDetails)。これらのドメインオブジェクトは、ラップされたDTOのグラフの読み込み/保存、DAOの呼び出し(トランザクションの処理、「汚れた」オブジェクトの検出など)を知っています。異なるサービスメソッドやユースケースに対して、同じDTO(つまり、別個のグラフ)をラップするいくつかの「ドメインクラス」が存在する可能性があることに注意してください。

+0

アドバイスありがとうございます。これは私の最初のバティスプロジェクトです。これは2つのオブジェクトのためのかなりの仕事のように思えます。私はもっと実生活を持っています。休止状態はここでより良い選択でしょうか? – User1

+2

その情報だけでHibernateとiBatisを決めるのは不可能です。オブジェクトの量はここでは重要ではありません(実際には私のアプローチはオブジェクトが多数ある場合にはより多くを支払う)。より関連性の高いのは、サービスメソッドで操作されるオブジェクトグラフの複雑さ、「汚れた」子オブジェクトの検出の必要性などです。iBatisはHibernate/JPAより軽い/単純/低レベルです。驚きや厄介なバグ)や欠点(複雑な使用事例の実装が難しい配管コード、電力と機能の追加が必要) – leonbloy

関連する問題