如何在iBatis中映射List ?

我有这样的课

public SomeClass { private List _strings = new List(); public IEnumerable Strings { { get return _strings; } } } 

我如何为_strings做映射?

我试过这个,但它抱怨List typehandler没有被找到,如果我将它作为一个对象映射它就不会抱怨。

  

所以我搜索谷歌并发现了这个解决方法(最初是针对Java问题,不知道它是否可以在C#中工作)

     

这至少让测试运行,它返回我的对象​​的其余部分,并且我的列表具有正确的条目数,除了它们都是空白的。

我认为问题是属性属性是空白的,但我不确定是什么意思去那里。 (我也试过使用’价值’,但这也不起作用)。 这似乎应该更简单,我只是忽略了一些明显的东西。

谢谢。

使用IBatis的自动结果映射。 这是Java中的解决方案,您可以轻松映射到C#。 这是你的sql map:

   select first_name as firstName from user   

然后你可以这样称呼它:

 List  userNames = (List  )sqlMap.queryForList("Users.names"); 

因此,您不必创建具有一个属性的自定义类型来执行此操作。

我的经验是使用Java版本的iBATIS,但解决方案应该仍适用于那里的C#peeps。

给一个class级

 class MyClass { int id; List firstName; } 

您可以使用以下两个resultMaps填充字符串列表或其他简单类型(没有属性的类,如Integer,String等)

           

希望这可以帮助。

至少在iBATIS3 for Java中,您可以使用如下结果:

    

以下是我使用Java版IBatis(版本2.3.4)的经验。 我的场景是我希望Ibatis为我返回一个给定参数列表的键和值的映射。 使用Ibatis queryForMap方法返回一个映射,其中键是一个Object,值是一个对象的集合(这个例子Key是一个Wrapper,而值是Wrapper Longs的列表)。

创建占位符(使用getter / setter)以在查询执行时保存数据。

 class PlaceHolder { private long elementId;; private List valueIds; } 

Ibatis结果图定义

         

我最初的麻烦是在父地图上获得别名’right和groupBy语法。 拥有groupBy将获得Ibatis为elementId获取相同的对象以填充子项。 一个没有groupBy的实例我发现,对于每个键,添加到列表中的前一个子项被最新的子项替换为初始化的新列表(注意我在写这个例子的时候还没有看到Ibatis的内部) 。 占位符别名必须与父级和子级的resultMap匹配。 Ibatis 3似乎有更好的语法来定义和处理上面的场景。

如果是IBatis-3,请使用下面的内容

  

由于没有找到解决方案,我只是选择了一种我并不特别自豪的方法。

我映射了一个除了字符串值之外没有其他属性的类。

 public class StringValue { public String Name { get; set; } }    

iBatis似乎没有问题,只是映射到字符串集合。

你可以使用’System.String’或’java.lang.String’作为属性

这对我有用,从程序输出光标得到一个字符串列表

 List ss = sqlmap.queryList(..        enter code here  { call aaa.bbb(?, ?) }