当前位置: 首页 > news >正文

记录:Spring JdbcTemplate查询返回的Map与数据库对查询字段名的处理

 1.先说Spring JdbcTemplate查询返回的Map


    在使用Spring提供的JdbcTemplate类对数据库进行操作的时候,直接使用如下所示的系列重载方法需要特别注意返回的Map类型。

    org.springframework.jdbc.core.JdbcTemplate

1
2
3
public  Map<String, Object> queryForMap(String sql, Object[] args,  int [] argTypes)  throws  DataAccessException {
         return  queryForObject(sql, args, argTypes, getColumnMapRowMapper());
     }
1
2
3
public  List<Map<String, Object>> queryForList(String sql, Object[] args,  int [] argTypes)  throws  DataAccessException {
         return  query(sql, args, argTypes, getColumnMapRowMapper());
     }


    JdbcTemplate在处理查询结果包装成Map的时候使用了自己定义的Map,该Map继承自LinkedHashMap,且其key值的大小写不区分。

    该Map是org.springframework.util.LinkedCaseInsensitiveMap,其内部用一个Map来维护key的映射关系:小写key-原始key,而LinkedCaseInsensitiveMap本身的映射关系仍然是:原始key-元素。这样在处理添加,删除,获取的时候就可以实现忽略key的大小写。

    例如获取指定key映射的元素:

    

1
2
3
4
5
6
7
8
9
@Override
     public  V get(Object key) {
         if  (key  instanceof  String) {
             return  super .get( this .caseInsensitiveKeys.get(convertKey((String) key)));
         }
         else  {
             return  null ;
         }
     }

   那么在实际开发中使用JdbcTemplate对象查询后获得Map,然后获取指定key(数据库字段名)的值时下面所示获取同样的结果。

   

1
2
System.out.println( "clientId="  + m.get( "clientId" ) +  ", clientid="
                     + m.get( "clientid" ));

 

  2.接下来说数据库对查询字段名的处理(字段名的大小写问题)

   

    Postgresql:

    由于Postgresql是大小写敏感,对数据库中的对象名称默认采用小写,查询字段名统一处理为小写,而SQL是不区分大小写。

    如果要在Postgresql中使得查询字段名大小写敏感需要用双引号("")引住,数据库中的对象名同理。

    如果要在Postgresql中使用字符串常量,则需要用单引号('')引住。

    !!Postgresql数据库使用需要格外注意命名。

 

    MySQL:

    Linux下:数据库名,表名,表的别名,变量名严格区分大小写(操作系统本身是区分大小写的)

    列名和列的别名不区分大小写。

    Windows下:不区分大小写,不过Mysql有个系统变量lower_case_table_names可以帮助在windows下配置[my.ini]使得表名数据库名区分大小写。

    !!最好是约定一种较为合理能被开发人员和DBA接受的命名策略。


    SQL Server:

    SQLServer是否区大小写取决于其安装方式,可以通过设置来校对。

    比如通过修改数据库来设置是否区分大小写:


1
2
3
4
5
--大小写不敏感(Case-Insensitivity)
ALTER  DATABASE  [DatabaseName]  COLLATE  Chinese_PRC_CI_AI 
 
--大小写敏感(Case-Sensitivity)
ALTER  DATABASE  [DatabaseName]  COLLATE  Chinese_PRC_CS_AI

        其它可以设置的内容,可以参考:http://technet.microsoft.com/zh-cn/library/ms174269.aspx


    这里两个问题放在一起,源于JdbcTemplate中使用的LinkedCaseInsensitiveMap,当然也是应该开发过程中犯的一些错,如数据库设计时命名不规范,AS别名还不规范,


    任何开发前期的考虑不周全,设计不严谨,开发的松懈,测试的不到位都是部署后发生灾难的根源。码农总是急于编码,真的是一场恶梦!



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1586440,如需转载请自行联系原作者

相关文章:

  • 【转载】SSH服务器端/etc/ssh/sshd_conf配置文件详解
  • 微软私有云分享(R2)23 裸金属安装
  • 竞赛题解 - CF Round #524 Div.2
  • MySQL数据“误”删“攻防”战
  • 2018年OpenStack用户调查报告出炉:Kubernetes仍居首
  • Entity相互关系
  • 记一次程序员在办公室里的“撕逼”经历
  • Oracle常用的数值函数,日期函数
  • mac flutter 环境搭建
  • Centos6.6升级Python与安装ipython、pip小结
  • DVWA SQL Injection LOW
  • Apache用户认证;域名跳转;Apache访问日志
  • javascript 前端模版初探
  • 阿里云重磅发布RDS for SQL Server AlwaysOn集群版
  • GlusterFS基本安装
  • 【译】JS基础算法脚本:字符串结尾
  • 【React系列】如何构建React应用程序
  • Apache的80端口被占用以及访问时报错403
  • CentOS从零开始部署Nodejs项目
  • CSS相对定位
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Sass Day-01
  • 从PHP迁移至Golang - 基础篇
  • 诡异!React stopPropagation失灵
  • 基于遗传算法的优化问题求解
  • 近期前端发展计划
  • 我这样减少了26.5M Java内存!
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)逆序输出字符串
  • (poj1.3.2)1791(构造法模拟)
  • (ZT)一个美国文科博士的YardLife
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)Honghu Cloud云架构一定时调度平台
  • (五)c52学习之旅-静态数码管
  • (转)setTimeout 和 setInterval 的区别
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .axf 转化 .bin文件 的方法
  • .NET Core Web APi类库如何内嵌运行?
  • .net framework profiles /.net framework 配置
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .Net各种迷惑命名解释
  • @WebService和@WebMethod注解的用法
  • [ C++ ] STL---string类的模拟实现
  • [ 数据结构 - C++] AVL树原理及实现
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [20150629]简单的加密连接.txt