2016-07-24 10 views
0

私は、ProcessTypeテーブルから行のリストを返すselect *クエリ用のmybatisマッパーを作成しようとしていました。各行はProcessType pojoにマップされなければなりません。私はPOJOに単一の行をマッピングする方法を知っていますが、これについてProcess Typeのリストについてどうやって行くのですか?select *クエリのMybatisマッピング

POJO - > クラス名:PROCESSTYPE プロパティ:
文字列ABC。 文字列ID。 文字列の日付。

mapperから、私はProcessTypeテーブルのクエリの行のリストのカーソルを返すproc 'XYZ'を呼び出します。

答えて

0

よく分かりません。プライマリ、私はそれがこの単純な操作のための手順が必要ではないと思います、私は簡単なクエリとしてそれを行うでしょう。

このエンティティがある場合。

public class ProcessType { 

    String ABC, id, Date; 

    public ProcessType(String aBC, String id, String date) { 
     ABC = aBC; 
     this.id = id; 
     Date = date; 
    } 

    public String getABC() { 
     return ABC; 
    } 

    public void setABC(String aBC) { 
     ABC = aBC; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getDate() { 
     return Date; 
    } 

    public void setDate(String date) { 
     Date = date; 
    } 

} 

そして、このようなものとして、テーブルPROCESSTYPE:

create table PROCESS_TYPE (
    ABC VARCHAR(200), 
    ID VARCHAR(200), 
    DATE VARCHAR(200) 
); 

あなたのマッパー次のようにする必要があり、アノテーションを使用して:それは次の通りであるXMLを使用して、一方

public interface MapperProcessType { 

@Select("select * from PROCESS_TYPE") 
@Results({ 
    @Result(property = "ABC", column = "ABC"), 
    @Result(property = "id", column = "ID"), 
    @Result(property = "date", column = "DATE") 
    }) 
public List<ProcessType> findAll(); 

} 

<resultMap id = "result" type = "ProcessType"> 
    <result property = "ABC" column = "ABC"/> 
    <result property = "id" column = "ID"/> 
    <result property = "date" column = "DATE"/> 
</resultMap> 

<select id = "findAll" resultMap = "result"> 
    SELECT * FROM PROCESS_TYPE 
</select> 
+0

これは、暗黙的にすべての行をマップするのでしょうか? mybatisは、SQLクエリーから来る予定がProcessType行のリストであることをどのように知っていますか? ProcessTypeオブジェクトのリストはどのようにマップされますか? – RjnshD

+0

ProccessTypeのリストはメソッドの戻り値であることがわかります。また、@Resultsという注釈でプロパティをマッピングしていますが、プロパティ 'ABC'は列 'ABC'などと言っています。 MyBatisはどのようにマップされますか?あなたがアクセスした情報を反映させて、MyBatisはマップする方法を知っています。 – Pau

0

のあなたのMapper.javaクラスは、単にリストを返す必要がある:

List<ProcessType> getProcessTypes(); 

あなたMapper.xmlがresultTypeととしてクラスを使用する必要があります。

<select id="getProcessTypes" resultType="path.to.ProcessType"> 

それとも、あなたの列をマップするために、結果のマップを作成することができますProcessTypeプロパティに追加しますが、これはこの質問の範囲外です。

+0

その種の結果マップは、暗黙のうちにProcessTypeテーブルのすべての行をマップできるでしょうか? mybatisは、SQLクエリーから来る予定がProcessType行のリストであることをどのように知っていますか?そして、それはどのようにそれ自身で各processTypeオブジェクトをマップするでしょうか? – RjnshD

+0

インターフェイスメソッドのシグネチャは、リストを期待するものです。 ProcessTypeだけを返し、クエリが複数返された場合、「1つの結果が期待されますが、N個の数値または結果が返されました」というエラーが発生します。 – Troncoso

0

私がこれを正しく理解している場合は、結果マップでコレクションを使用していますか?これはmybatisにリストを期待するように指示します。

<collect property="" column=""> 
0

あなたがする必要があるのは、このようなresultMapを定義している:

<resultMap id="processTypeMap" type="yourpackage.ProcessType"> 
    <id property="id" column="id_in_db"/> 
    <result property="abc"   column="abc_in_db"/> 
    <result property="date"  column="date_in_db"/> 
</resultMap> 

columnがあなたのテーブルマッピングに関連した分野です。

は、その後、あなたがこのように上記で定義されたどのようresultMapを設定します。

<select id="getProcessTypes" resultMap="processTypeMap"> 
    select * from ProcessType 
</select> 

今、あなたのテーブルの列はそれに応じてマッピングされます。

ProcessTypeのリストを取得したいとしますので、DAOレイヤーでは、selectListメソッドを使用する必要があります。

あなたはあなたがする必要があるだろうすべては次のようなオブジェクトを「空」の例では、あなたのマッパークラスとフィードに .selectByExample()機能を使用することですMyBatisのjavaModelGenerator、sqlMapGenerator、およびjavaClientGeneratorを、使用していたと仮定すると、
List<ProcessType> processTypes = sqlSessionTemplate.selectList("getProcessTypes") 
1

for (MyTable myTable : myTableMapper.selectByExample(new MyTableExample())) { 
    System.out.println("found ID: " + myTable.getId()); 
} 

これは選択と同等です*

関連する問題