具有复合主键的表的MyBattis映射器

时间:2016-05-17 07:18:40

标签: java mysql database mybatis ibatis

我们有一个带复合主键的mysql表。桌子拿着物品。 然后我们有itemId,itemName,itemType,lang,shortDescription,LongDescription和其他一些字段。键是itemId和lang。这意味着ID为1的项目可以重复为英语和西班牙语,并且基于此,我们有不同的短期和长期描述。数据库未规范化,也不会进行规范化。我为Item编写了一个Java bean,如下所示:

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

其中,lan​​g描述是另一个包含lang,shortDescription和LongDescription的Java bean。

现在我想使用MyBatis编写一个mapper,从表Item中选择与列名相同的列名(itemId,itemType,lang,shortDescription,longDescription)的所有行,并创建一个Items列表。

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

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

}

有任何建议如何做到这一点?我应该使用TypeHandler还是使用Collectons和@Result注释更好?

1 个答案:

答案 0 :(得分: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,many=@Many(select="getLangDescriptions"))
    })
    List<Item> selectItems();

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

}

相应地更改SELECT_LANG_DESC查询以选择lang说明。