文档章节

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

hotsmile
 hotsmile
发布于 2015/08/26 17:06
字数 489
阅读 12
收藏 0
点赞 0
评论 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
博文 44
码字总数 22058
作品 0
福州
程序员
ibatis MyBatis区别与联系

简介: 本文主要讲述了 iBatis 2.x 和 MyBatis 3.0.x 的区别,以及从 iBatis 向 MyBatis 移植时需要注意的地方。通过对本文的学习,读者基本能够了解 MyBatis 有哪些方面的改进,并能够顺利使...

为了美好的明天 ⋅ 04/17 ⋅ 0

ibatis sqlMap 使用

SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间: 在此空间外要引用此空间的元素,则需要加上命名空间名。 2、实体的别名: 如果有用到的全名的地...

为了美好的明天 ⋅ 04/27 ⋅ 0

00fly/springmvc_ibatis_plus

#springmvcibatisplus ** 针对ibatis框架的代码生成器项目不再维护了,sorry。。。 ** 说明:如果数据库表中oracle无blob,clob字段,mysql中无text,blob字段请使用 noSupportBCLOB 分支代码...

00fly ⋅ 06/01 ⋅ 0

Java面试----2018年MyBatis常见实用面试题整理

Java面试----2018年MyBatis常见实用面试题整理 1、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 2、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存...

优惠券活动 ⋅ 04/29 ⋅ 0

MyBatis在注解上使用动态SQL(@select使用if)

1、用标签包围,然后像xml语法一样书写 @Select({"

easonjim ⋅ 2017/08/29 ⋅ 0

MyBatis3-SqlSessionDaoSupport的使用

以下内容引用自http://www.yihaomen.com/article/java/336.htm: 在MyBatis3中这个Mapper接口貌似充当了以前在iBatis2中的DAO层的作用。但事实上,如果有这个Mapper接口不能完成的工作,或者...

easonjim ⋅ 2017/06/22 ⋅ 0

阿里,百度,腾讯等一线互联网公司中,Java开发的招聘标准

金三银四的跳槽热潮即将过去,在这两个月的跳槽的旺季中,作为互联网行业的三大巨头,百度、阿里巴巴、腾讯对于互联网人才有很大的吸引力,他们的员工也是众多互联网同行觊觎的资深工程师、管...

javaxuexi123 ⋅ 04/20 ⋅ 0

Mybatis中的jdbcType的作用

Mybatis中的jdbcType的作用 使用MyBatis框架做更新操作时,在该字段需要更新的内容为空时,就会出现1111错误,也就是无效的列类型,这个时候你就要使用jdbcType。至于什么时候要使用到javaT...

architect刘源源 ⋅ 05/03 ⋅ 0

Ibatis入门基本语法

Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate、Toplink等在java编程的对象持久化方面深受开发人员欢迎。 对象关系映射(ORM):简单原理是通过面向对象方...

LCZ777 ⋅ 2014/12/26 ⋅ 1

Ibatis学习笔记

Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate、Toplink等在java编程的对象持久化方面深受开发人员欢迎。 对象关系映射(ORM):简单原理是通过面向对象方...

为梦而来 ⋅ 2014/05/14 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 41分钟前 ⋅ 0

Spring mvc DispatchServlet 实现原理

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherSer...

轨迹_ ⋅ 52分钟前 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 今天 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 今天 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 今天 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部