我正在嘗試爲select *查詢寫一個mybatis映射器,它將返回一個ProcessType表中的行列表。每行必須映射到ProcessType pojo。我知道如何將單行映射到POJO,但如何處理Process Type列表?Mybatis映射選擇*查詢
POJO - > 類名稱:ProcessType 屬性:
字符串ABC; String id; 字符串日期;
從映射程序中我調用一個proc'XYZ',它向我返回正在查詢的ProcessType表的行列表的光標。
我正在嘗試爲select *查詢寫一個mybatis映射器,它將返回一個ProcessType表中的行列表。每行必須映射到ProcessType pojo。我知道如何將單行映射到POJO,但如何處理Process Type列表?Mybatis映射選擇*查詢
POJO - > 類名稱:ProcessType 屬性:
字符串ABC; String id; 字符串日期;
從映射程序中我調用一個proc'XYZ',它向我返回正在查詢的ProcessType表的行列表的光標。
我對所有問題都不甚瞭解。小學,我認爲這是不需要一個簡單的操作過程,我會做一個簡單的查詢。
所以,如果你有這個實體。
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>
個你Mapper.java類只需要返回一個列表:
List<ProcessType> getProcessTypes();
你Mapper.xml應該使用類作爲與resultType:
<select id="getProcessTypes" resultType="path.to.ProcessType">
或者你可以創建一個結果地圖映射您的列到ProcessType屬性,但這超出了這個問題的範圍。
如果我正確理解這一點,您是否在結果地圖中使用了一個集合?這告訴mybatis期待一個列表。
<collect property="" column="">
所有你需要做的就是定義一個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")
假設你使用MyBatis的javaModelGenerator,sqlMapGenerator和javaClientGenerator,所有你需要做的就是用你的映射類的.selectByExample()
功能和「空」實例供稿對象,如以下:
for (MyTable myTable : myTableMapper.selectByExample(new MyTableExample())) {
System.out.println("found ID: " + myTable.getId());
}
這相當於一個SELECT *
是否都行隱含地圖嗎? mybatis如何知道即將從sql查詢中得到的是ProcessType行的列表?它將如何映射ProcessType對象的列表? – RjnshD
它知道是ProccessType的列表,因爲它是方法的返回。此外,您通過註釋@Results映射屬性,您說的屬性'ABC'是'ABC'列等等。 MyBatis如何映射?通過反思性的信息,MyBatis知道如何映射它。 – Pau