如何在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(?, ?) }