2016-05-17 2 views
0

У нас есть таблица mysql с составным первичным ключом. В таблице хранятся элементы. Затем у нас есть itemId, itemName, itemType, lang, shortDescription, LongDescription и некоторые другие поля. Клавиши - itemId и lang. Это означает, что элемент с идентификатором один можно повторить для английского и испанского, и на основе этого мы имеем разные короткие и длинные описания. База данных не нормируется, и она также не будет нормализована. Я написал боб Java для пункта, который выглядит следующим образом:MyBattis mapper для таблицы с составным первичным ключом

public class Item { 
    private String itemId; 
    private String itemName; 
    private String itemType; 
    List<LangDescription> langdescriptions; 

    public String getItemId() { 
     return itemId; 
    } 

    public void setItemId(String itemId) { 
     this.itemId = itemId; 
    } 

    public String getItemName() { 
     return itemName; 
    } 

    public void setItemName(String itemName) { 
     this.itemName = itemName; 
    } 

    public String getItemType() { 
     return itemType; 
    } 

    public void setItemType(String itemType) { 
     this.itemType = itemType; 
    } 

    public List<LangDescription> getLangdescriptions() { 
     return langdescriptions; 
    } 

    public void setLangdescriptions(List<LangDescription> langdescriptions) { 
     this.langdescriptions = langdescriptions; 
    } 
} 

где описание Ланг другой боб Java, содержащий языки, SHORTDESCRIPTION и LongDescription.

Теперь я хочу написать mapper using MyBatis, чтобы выбрать все строки из таблицы. Элемент с теми же именами столбцов, что и имена полей (itemId, itemType, lang, shortDescription, longDescription) и создать список элементов.

public interface CRMTermsAndConditionsMapper { 
    static final String SELECT_ITEMS = "SELECT * FROM items;"; 

    @Select(SELECT_ITEMS) 
    List<Item> selectItems(); 

} 

Любое предложение, как это можно сделать? Должен ли я использовать TypeHandler или лучше использовать коллекторы и аннотации @Result?

ответ

0

Поскольку вы используете картограф интерфейсы, вы должны использовать @Many выберите аннотацию,

public interface CRMTermsAndConditionsMapper { 
    static final String SELECT_ITEMS = "SELECT * FROM items;"; 
    static final String SELECT_LANG_DESC = "SELECT * FROM lang_description;"; 

    @Select(SELECT_ITEMS) 
    @Results({ 
     @Result(property="langdescriptions",column="langdescriptions", 
       javaType=List.class,[email protected](select="getLangDescriptions")) 
    }) 
    List<Item> selectItems(); 

    @Select(SELECT_LANG_DESC) 
    public List<LangDescription> getLangDescriptions(); 

} 

Изменения SELECT_LANG_DESC запросов соответственно для выбора описания Ланга.