首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mybatis- 3.1.1。如何覆盖mybatis返回的resultmap

mybatis- 3.1.1。如何覆盖mybatis返回的resultmap
EN

Stack Overflow用户
提问于 2012-07-30 19:44:12
回答 3查看 7K关注 0票数 1

我们使用mybatis 3.1.1。

我们发现对于oracle,返回的结果映射包含大写字母的列名,对于mySql,返回的结果映射包含小写的列名。

我的问题是:是否有任何方法可以编写某种拦截器,以便修改由result map返回的结果。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-31 11:30:14

我担心答案是MyBatis没有提供任何直接的方法来控制结果映射中键的大小写。我最近在MyBatis谷歌群组上问了这个问题:https://groups.google.com/forum/?fromgroups#!topic/mybatis-user/tETs_JiugNE

结果取决于JBDC驱动程序的行为。

它还证明,按照@jddsantaella的建议进行列别名并不是在所有情况下都有效。我曾经在三个数据库上测试过MyBatis-3.1.1 : MySQL,PostgreSQL和H2,得到了不同的答案。对于MySQL,列别名的大小写决定了哈希表中键的大小写。但是对于PostgreSQL,它总是小写,而对于H2,它总是大写。我没有测试列别名是否适用于Oracle,但在默认情况下,它似乎返回大写字母。

我看到了两个选择

选项1:创建一些帮助器方法,您的代码将始终使用该方法从返回的映射中提取数据。例如:

代码语言:javascript
复制
private Object getFromMap(Map<String, Object> map, String key) {
  if (map.containsKey(key.toLowerCase())) {
    return map.get(key.toLowerCase());
  } else {
    return map.get(key.toUpperCase());
  }
}

选项2:编写一个从java.util.AbstractMapjava.util.HashMap扩展的LowerCaseMap类,并将对putputAll和/或get的所有调用包装为始终小写。然后指定在从查询填充数据时,MyBatis应该使用特定的LowerCaseMap,而不是标准的HashMap。

如果您喜欢这个想法,并希望获得有关如何告诉MyBatis如何使用不同的具体集合类的帮助,请参阅我对这个StackOverflow问题的回答:https://stackoverflow.com/a/11596014/871012

票数 4
EN

Stack Overflow用户

发布于 2012-07-30 19:49:01

如果修改查询以获得所需的确切列名,该怎么办?例如:

代码语言:javascript
复制
select my_column as MY_COLUMN from ...
票数 0
EN

Stack Overflow用户

发布于 2013-02-14 03:31:41

将LowerCaseMap用作ResultType的想法是合理的,但您可能可以避免编写自己的a。在我的例子中,我使用org.apache.commons.collections4.map.CaseInsensitiveMap

代码语言:javascript
复制
<select id="getTableValues" 
        resultType="org.apache.commons.collections.map.CaseInsensitiveMap">
      SELECT *
        FROM my_table
       WHERE seq_val=#{seq_val}
</select>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11720856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档