记录: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,如需转载请自行联系原作者
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
1101 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
Cloud Native 关系型数据库 分布式数据库
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
10月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1764 5
|
12月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
795 1
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
796 0
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
10月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
590 158

热门文章

最新文章