我需要在MyBatis中做一些动态的sql映射,以便让它为每一列做类似的事情:
switch (filter.FilterType)
{
case FilterType.BeginsWith:
operatorStr = "UPPER({0}) LIKE '{1}%' ";
value = filter.Value.ToUpper();
break;
case FilterType.Contains:
operatorStr = "UPPER({0}) LIKE '%{1}%' ";
value = filter.Value.ToUpper();
break;
case FilterType.GreaterThan:
operatorStr = " {0} > {1} ";
break;
case FilterType.GreaterThanOrEqual:
operatorStr = " {0} >= {1} ";
break;
case FilterType.LessThan:
operatorStr = " {0} < {1} ";
break;
case FilterType.LessThanOrEqual:
operatorStr = " {0} <= {1} ";
break;
}
我需要有这样的过滤器的原因是,我有一个网页,它将表格的数据显示为网格,每个列都是可搜索/可排序的。我不想为每一列编写if-else子句,所以试着看看Mybatis中的列属性映射是否有助于这项工作。
我想有办法让Mybatis知道我希望它指向哪个列在过滤器中有效。我知道我可以使用简单的动态方法来实现这一点,方法是在我自己的自定义代码中动态计算出我要过滤的实际列。但我不想在编程源代码中混合实际的表列名。我认为这样做更合理的方法是将类属性名称传递给Mybatis的API,然后让它找出映射到类的属性名称的实际列。
有人有关于如何做到这一点的想法吗? Mybatis中是否有API来提供此列属性映射关系函数,例如。它可以像字典一样,我在属性名称中传递,然后它给我实际的列名?
提前致谢!
答案 0 :(得分:0)
mybatis不支持切换,因此您可以使用它来实现此目的
<choose>
<when test=""></when>
<when test=""></when>
<when test=""></when>
<when test=""></when>
<otherwise></otherwise>
</choose>
你可以将过滤器类型作为参数传递,然后验证它。