小编Cas*_*uck的帖子

在MyBatis 3中嵌套的foreach用于HashMap参数

我试图找出使用MyBatis 3.0.6解决以下问题的方法:

我需要根据一系列参数构建动态select语句,其中一个参数类型HashMap<String, List<String>>.挑战在于弄清楚如何使MyBatis迭代外部foreach循环中的所有键,以及迭代内部循环中值列表的元素.

为了说明,假设我的名为filter的哈希映射参数包含每个国家的状态(状态代码列表,每个列表是值)(国家代码作为键),如下所示:

'US' -> {'CO','NY','MI','AZ'};
'CA' -> {'ON','BC','QC'}
Run Code Online (Sandbox Code Playgroud)

我需要我的动态SQL看起来像这样(以简化的形式):

SELECT *
FROM  Table1
WHERE ... some static criteria goes here...
      AND RowId IN (SELECT RowId FROM Table2 WHERE Country = 'US' AND State IN ('CO','NY','MI','AZ')
      AND RowId IN (SELECT RowId FROM Table2 WHERE Country = 'CA' AND State IN ('ON','BC,'QC')
Run Code Online (Sandbox Code Playgroud)

我想我的mapper XML应该是这样的:

<select id="getData" resultType="QueryResult">
SELECT *
FROM  Table1
WHERE ... some static criteria goes here...
     <if test="filter != null">
         <foreach …
Run Code Online (Sandbox Code Playgroud)

foreach hashmap mybatis

5
推荐指数
1
解决办法
1万
查看次数

如何将ServiceStack AuthSession注入我的存储库类?

我正在努力找到将UserAuthSession对象的当前实例(从ServiceStack派生AuthUserSession)注入我的数据访问存储库的正确方法,以便它们在插入/更新/删除操作上自动更新更改跟踪字段.

如果我在我的服务代码中新建了存储库,那将是一个明智的选择,我会这样做:

var repo = new MyRepository(SessionAs<UserAuthSession>());
Run Code Online (Sandbox Code Playgroud)

但是,我的存储库是自动连接(注入)到服务中的,所以UserAuthSession必须从为存储库注册IOC容器定义的lambda中的某个位置抓取,例如:

public class AppHost : AppHostBase
{
    public override void Configure(Container container)
    {
        container.Register<ICacheClient>(new MemoryCacheClient());
        container.Register<IRepository>(c =>
        {
            return new MyRepository(**?????**);  <-- resolve and pass UserAuthSession
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,查看Service该类的ServiceStack代码:

    private object userSession;
    protected virtual TUserSession SessionAs<TUserSession>()
    {
        if (userSession == null)
        {
            userSession = TryResolve<TUserSession>(); //Easier to mock
            if (userSession == null)
                userSession = Cache.SessionAs<TUserSession>(Request, Response);
        }
        return (TUserSession)userSession;
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到它根据当前Request和查找缓存的会话Response …

servicestack

5
推荐指数
1
解决办法
690
查看次数

使用ServiceStack服务与ASP.NET MVC控制器的优缺点?

注意:这与处理ServiceStack和WebAPI之间选择的几个问题不重复.

我试图决定在ASP.NET Web应用程序中使用ServiceStack的程度:

选项A:通过抛弃MVC控制器并使用基于ServiceStack的服务和Razor视图替换它们来全力以赴的ServiceStack.

选项B:使用支持ServiceStack的MVC控制器以获得更好的性能和可伸缩性.

A的明显优势是它在构造我的视图时提供了额外的灵活性.但是,我关心两件事:

  1. 与MVC控制器处理的纯C#对象相比,ServiceStack执行的对JSON或Xml的请求/响应DTO的所有序列化/反序列化都将以性能为代价.

  2. 在处理复杂的对象图时,序列化可能有点不稳定.例如,在涉及循环引用的情况下,Parent.Child <-> Child.Parent必须使用IgnoreDataMember属性,否则序列化将打击堆栈.此外,有时反序列化可能会产生难以诊断的模糊"对象引用未设置"错误.

有没有人对这种困境有任何想法?

asp.net-mvc servicestack

3
推荐指数
1
解决办法
1093
查看次数

标签 统计

servicestack ×2

asp.net-mvc ×1

foreach ×1

hashmap ×1

mybatis ×1