文档章节

用ibatis 调用 sqlmapclient 来去除数据库元数据的大小写问题

hotsmile
 hotsmile
发布于 2015/08/26 17:06
字数 489
阅读 18
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

刚接收一个项目,项目原先是基于oracle的,项目里面有一个webservice 直接通过sqlmapclient 来获取数据库的,但是oracle ,通过ibatis调用取得的map,元数据都是大写的,现在项目要支持多种数据库,例如MySQL、postgresql等数据库,元数据是小写的,通过参考spring框架,采用map进行转换成 LinkedCaseInsensitiveMap 来实现,原先框架用xfire实现的webservice,想直接引入spring的包,发现有冲突,后面把这个LinkedCaseInsensitiveMap的源妈引入,解决了。

@SuppressWarnings("serial")
public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> {

 private final Map<String, String> caseInsensitiveKeys;

 private final Locale locale;


 /**
  * Create a new LinkedCaseInsensitiveMap for the default Locale.
  * @see java.lang.String#toLowerCase()
  */
 public LinkedCaseInsensitiveMap() {
  this(null);
 }

 /**
  * Create a new LinkedCaseInsensitiveMap that stores lower-case keys
  * according to the given Locale.
  * @param locale the Locale to use for lower-case conversion
  * @see java.lang.String#toLowerCase(java.util.Locale)
  */
 public LinkedCaseInsensitiveMap(Locale locale) {
  super();
  this.caseInsensitiveKeys = new HashMap<String, String>();
  this.locale = (locale != null ? locale : Locale.getDefault());
 }

 /**
  * Create a new LinkedCaseInsensitiveMap that wraps a {@link LinkedHashMap}
  * with the given initial capacity and stores lower-case keys according
  * to the default Locale.
  * @param initialCapacity the initial capacity
  * @see java.lang.String#toLowerCase()
  */
 public LinkedCaseInsensitiveMap(int initialCapacity) {
  this(initialCapacity, null);
 }

 /**
  * Create a new LinkedCaseInsensitiveMap that wraps a {@link LinkedHashMap}
  * with the given initial capacity and stores lower-case keys according
  * to the given Locale.
  * @param initialCapacity the initial capacity
  * @param locale the Locale to use for lower-case conversion
  * @see java.lang.String#toLowerCase(java.util.Locale)
  */
 public LinkedCaseInsensitiveMap(int initialCapacity, Locale locale) {
  super(initialCapacity);
  this.caseInsensitiveKeys = new HashMap<String, String>(initialCapacity);
  this.locale = (locale != null ? locale : Locale.getDefault());
 }


 @Override
 public V put(String key, V value) {
  String oldKey = this.caseInsensitiveKeys.put(convertKey(key), key);
  if (oldKey != null && !oldKey.equals(key)) {
   super.remove(oldKey);
  }
  return super.put(key, value);
 }

 @Override
 public void putAll(Map<? extends String, ? extends V> map) {
  if (map.isEmpty()) {
   return;
  }
  for (Map.Entry<? extends String, ? extends V> entry : map.entrySet()) {
   put(entry.getKey(), entry.getValue());
  }
 }

 @Override
 public boolean containsKey(Object key) {
  return (key instanceof String && this.caseInsensitiveKeys.containsKey(convertKey((String) key)));
 }

 @Override
 public V get(Object key) {
  if (key instanceof String) {
   return super.get(this.caseInsensitiveKeys.get(convertKey((String) key)));
  }
  else {
   return null;
  }
 }

 @Override
 public V remove(Object key) {
  if (key instanceof String ) {
   return super.remove(this.caseInsensitiveKeys.remove(convertKey((String) key)));
  }
  else {
   return null;
  }
 }

 @Override
 public void clear() {
  this.caseInsensitiveKeys.clear();
  super.clear();
 }


 /**
  * Convert the given key to a case-insensitive key.
  * <p>The default implementation converts the key
  * to lower-case according to this Map's Locale.
  * @param key the user-specified key
  * @return the key to use for storing
  * @see java.lang.String#toLowerCase(java.util.Locale)
  */
 protected String convertKey(String key) {
  return key.toLowerCase(this.locale);
 }
}

hotsmile
粉丝 8
博文 70
码字总数 44853
作品 0
福州
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.6K
8
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.7K
0
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0

没有更多内容

加载失败,请刷新页面

加载更多

【每周CV论文】初学深度学习图像对比度增强应该要读的文章

欢迎来到《每周CV论文》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。 图像对比度增强,即增强图像中的有用信息,抑...

言有三
昨天
0
0
运营商大数据-行业大数据获客利器

一、永远不要沉溺在安逸里得过且过,能给你遮风挡雨的,同样能让你不见天日,只有让自己更加强大,才能真正撑起一片天。 二、别把生活当作游戏,谁游戏人生,生活就惩罚谁,这不是劝诫,而是...

osc_1wo6kipk
27分钟前
0
0
【Rust日报】2020-08-10:在 Rust 中存储连续数据

在 Rust 中存储连续数据? 作者都帮你整理好了: 使用 Rust 中的数组 [T; N]. Slice &[T] or &mut [T], 可以方便的 split. Boxed slice Box<[T]>. Vec. 长度和内容都可以变化,这可能是我们最常...

MikeTang
昨天
19
0
Gradient Centralization: 一行代码加速训练并提升泛化能力 | ECCV 2020 Oral

梯度中心化GC对权值梯度进行零均值化,能够使得网络的训练更加稳定,并且能提高网络的泛化能力,算法思路简单,论文的理论分析十分充分,能够很好地解释GC的作用原理   来源:晓飞的算法工程...

zb1486966459725
昨天
0
0
移动大数据-装修行业获客利器

因为海伦凯勒的努力和坚毅不拔的个性,而赢得了大家的肯定,终于得到了诺贝尔文学奖。虽然得了诺贝尔奖,但她对生命依然奋战不懈,她马不停蹄的到各地学校里演讲。有一次,她到一所大学演讲,...

osc_qheq8wav
27分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部