文档章节

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

hotsmile
 hotsmile
发布于 2015/08/26 17:06
字数 489
阅读 13
收藏 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
粉丝 6
博文 50
码字总数 25067
作品 0
福州
程序员
Spring整合Ibatis之SqlMapClientDaoSupport

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建,继而整合iBatis和Spring。 与hibernate类似...

Gillian_Male
2012/08/03
0
1
ibatis学习(一)--ibatis介绍以及用例 [转]

介绍 iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性。 iBATIS不同于一般的OR映射框架(eg:hibernate)。OR映射框架,将数据库表、字段等映射到类、属性,那是一种元...

B.H.
2012/09/26
0
0
iBatis2学习笔记:基本原理和配置

iBatis2学习笔记:基本原理和配置 iBatis2是一个轻量级的数据持久化框架,它是一个半自动化的ORMapping工具,数据库的操作依赖程序员自己书写的SQL,因此可以最大限度发挥JDBC的性能。据测试...

亚特兰缇斯
2015/03/04
0
2
Spring项目配置ibatis

biz-context.xml sqlMapClient这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。这个类是我们使用iBATIS的最主要的类。它是线程安全的。通常,将它定义为单...

kanlianhui
2014/03/19
0
1
iBatis和Hibernate浅析

iBatis和Hibernate浅析 Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hiber...

JAVA__
2012/08/16
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令。 在ng-repeat模板实例内部会暴露出一些特殊属...

孟飞阳
51分钟前
1
0
URLEncoder和URLDecoder

public static void main(String[] args) { String str1 = "https://test1-life.pingan.com/ilifecore/productMall/loading.html?productId=8000000241&channelCode=XCX00001&productCode=00......

鬼才王
今天
2
0
对象及变量的并发访问-第一篇

方法内部的变量为线程安全变量 “非线程安全”问题存在于“共享变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的。 package chaprer3;/**...

简心
今天
1
0
程序媛眼中的程序猿原来是这样子的!

一直都想写一篇关于描述程序员的文章,但是一直没能开头,一来因为文笔不好,更主要的原因是貌似对程序员既熟悉又不熟悉,很怕写出来的是以偏概全,给大家造成对程序员的既定印象,不过,管他...

Java小铺
今天
1
0
bean标签

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 bean标签 bean标签中的init-method属性,该属性...

凯哥学堂
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部