2016-07-24 102 views
0

我正在嘗試爲select *查詢寫一個mybatis映射器,它將返回一個ProcessType表中的行列表。每行必須映射到ProcessType pojo。我知道如何將單行映射到POJO,但如何處理Process Type列表?Mybatis映射選擇*查詢

POJO - > 類名稱:ProcessType 屬性:
字符串ABC; String id; 字符串日期;

從映射程序中我調用一個proc'XYZ',它向我返回正在查詢的ProcessType表的行列表的光標。

回答

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) 
); 

使用註釋應爲您的映射:

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(); 

} 

在另一方面,使用XML是作爲下:

<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方法。

List<ProcessType> processTypes = sqlSessionTemplate.selectList("getProcessTypes") 
1

假設你使用MyBatis的javaModelGenerator,sqlMapGenerator和javaClientGenerator,所有你需要做的就是用你的映射類的.selectByExample()功能和「空」實例供稿對象,如以下:

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

這相當於一個SELECT *