我们有一个带复合主键的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;
}
}
其中,lang描述是另一个包含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注释更好?
答案 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说明。