2016-07-24 8 views
0

Я пытался написать mybatis mapper для запроса select *, который вернет мне список строк из таблицы ProcessType. И каждая строка должна быть сопоставлена ​​с POI ProcessType. Я знаю, как сопоставить одну строку с POJO, но как это сделать для списка Тип процесса?Отображение Mybatis для select * query

POJO -> имя класса: ProcessType Свойства:
Строка ABC; String id; Дата строки;

Из mapper Я называю 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()); 
} 

Это эквивалентно отборное *