首页 > 解决方案 > MyBatis 映射结果到 List在 MyBatis 存储库中

问题描述

我的数据库中有一行在此处输入图像描述

和java函数

@Select("<script>\n" +
            "SELECT TARIFF FROM MY_TABLE WHERE ROW_ID = #{id}\n" +
       "</script>\n")
List<String> findTariffById(@Param("id") String id);

如果我添加@ResultType(String.class),我会得到一个包含 1 个元素的列表:“classic;premium;my-conversation”

但我需要获取包含 3 个元素的列表:

“经典的”

“优质的”

“我的谈话”

如果我有 POJO 类关税

@Data
public class Tariff{

    private List<String> name;

}

比我可以改变我的功能

@Select("<script>\n" +
            "SELECT TARIFF FROM MY_TABLE WHERE ROW_ID = #{id}\n" +
       "</script>\n")
@Results({
    @Result(property = "name", column = "TARIFF", typeHandler = StringArrayListTypeHandler.class)}
)
Tariff findTariffById(@Param("id") String id);

而且要快乐..

但是,我需要得到List<String>

我可以在List<String>不创建 POJO 的情况下获得吗?

PS StringArrayListTypeHandler 解析字符串到列表

标签: javamybatisspring-mybatis

解决方案


您可以从第一个结果开始,并将其拆分为数组列表。在我的代码摘录中,起始列表是空的,但正如评论的那样,您应该使用从 DB 初始化的大小为 1 的列表。因此,您使用分隔符“;”手动拆分字符串。

        List<String> returnedListOfSizeOne = new ArrayList<>(); //.add("classic;premium;my-conversation")
        List<String> properlySplitString = new ArrayList<>();
        for(String string: returnedListOfSizeOne){
            Collections.addAll(properlySplitString,string.split(";"));
        }

推荐阅读