下面要给大家讲一个关于map和bean的故事。。。

(在spring jdbc玩map被玩死)

bean:pojo类,我习惯叫bean,有时候也叫他entity,实体类。

不要在springjdbc里玩map,这不是演习!!!
------------------------------------------------

前戏:

还记得很久以前,我在上学的时候,老师教我们什么叫数据库,什么叫SQL,怎么使用JDBC去连接数据库,然后写一坨代码:

....
02.Connection conn = null; 
03.PreparedStatement pstmt = null;
04.try {
05.conn = getConnection(); //1.获取JDBC连接 
06.String sql = "select * from tableName"; //2.声明SQL
07.pstmt = conn.prepareStatement(sql); //3.预编译SQL
08.ResultSet rs = pstmt.executeQuery(); //4.执行SQL
09.process(rs); //5.处理结果集
10.closeResultSet(rs); //5.释放结果集
11.closeStatement(pstmt); //6.释放Statement 
12.conn.commit(); //8.提交事务
13.} catch (Exception e) { 
14.//9.处理异常并回滚事务
15.conn.rollback();
16.throw e;
17.} finally {
18.//10.释放JDBC连接,防止JDBC连接不关闭造成的内存泄漏
19.closeConnection(conn);
20.}
21.....

之后,战战兢兢的去用eclipse启动服务,oh yes!

数据库里的数据神奇的出来了!!!

之后会了单表CRUD,我就敢自信满满的在简历上写着“精通jdbc”了。。。

。。。

ok,谁都有过青春,不是吗?

------------------------------------------------

时光荏苒,一晃就毕业了,进入到了工作岗位中,由于之前的JDBC连接数据库的方式实在是太繁琐了,并且很有可能一不小心漏掉了什么,就出现了bug。

并且使用JDBC后,我还得费劲巴拉的把resultSet里的东西给自己转成bean里,so?

我们用了hibernate。。。

当年斥叉风云SSH框架(struts/spring/hibernate),一时间,风起云涌,好像只要会SSH就可以找到好工作了,不会SSH就不敢跟别人打招呼。

然后hibernate并不是那么想象中的完美。

我总结出的hibernate的缺点/痛点有(也是某些公司的面试题):

1.hibernate传说中的不用写sql,是很强大,配置好了之后,你就看你的控制台上输出的sql吧,如果你的项目不care性能。(哪个项目不care性能?除非是毕设~)

2.当年的那个OneToMany,ManyToOne,OneToOne的配置的确让我痛苦了一阵子,我承认我很low。。。

3.hibernate传说中的hql和方言,亲,无论你换成什么数据库,都不用修改我们的hql哟~只要换方言就可以啦,但是哪个项目会经常换数据库呢?并且hql不支持复杂的sql写法,我觉得挺鸡肋的功能。

4.我记忆犹新的一件事,当时数据查出来了之后,到页面上就报错,结果搜索了一下,发现是什么hibernate的session已经关闭了,需要借用spring的一个什么东西才能好。

5.hibernate传说中的二级缓存,玩不好能玩死你,并且现在谁还用spring/hibernate的缓存啊?现在都是分布式/大数据的时代,全是分布式redis,memcache的年代了。

6.各种各样的复杂概念,各种复杂配置,什么延迟加载啊,session的生命周期啊,哦,我的天。

7.学习成本高

经历了一些事情之后,开始学会慢慢的长大,有那么句话叫:“经历的多了,也就成熟了。”

后来和几个同事聊了很多关于hibernate的优缺点,发现hibernate的优点我们都用不上,用上的都是痛点,

于是痛定思痛,决定摒弃hibernate,寻找新的持久层框架。

------------------------------------------------

之后接触了spring jdbc,mybatis,spring data jpa等框架。

当时就想一直用一个持久层框架,配合各种自己写的半自动化代码生成工具以及baseDao,可以节省大量工作量,时间就是金钱,我的朋友。

这些框架各有千秋,选来选去,忽然间发现spring jdbc的namedParameterJdbcTemplate里无论是入参,还是返回值,都可以玩Map,我当时头脑一热,这下好啦:

1.首先spring jdbc是spring的亲儿子,应该不会出什么兼容性问题的幺蛾子。

2.Map非常灵活呀,想放什么就放什么,想拿什么就拿什么,都是Object嘛。

3.最重要的一点是,可以完全摒弃了bean,之前表一多,各种bean满天飞的时代一去不复返啦,现在只要Map,Map在手,天下我有。

经过短暂的头发发热之后,开始风风火火的封baseDao,写自动生成工具,然后风风火火的接项目(自己创业期间),开始干!

做了几个小项目,发现,恩~map还真真儿的不错呢,好方便呀,我封好的baseDao里基本上涵盖了所有dao里80%的代码,项目组里的小盆友们甚至不用写dao,但是痛点也来了,service层上耦合了大量dao的东西,非常乱,因为当时是小项目,痛点没有凸现出来,直到。。。。。。。

直到做了所谓的中型项目后,一旦人一多,表一多,逻辑一多,玩多模块多项目开发的时候,各种依赖的时候。。。

oh no。。。

------------------------------------------------

前戏结束,步入正题,下面列出map和bean的优缺点:

map的优点:

1.灵活,通用,相当于是一个大泛型,也可以转成bean。

2.大幅提高开发速度(开发层面)

3.数据库频繁变动的前提下,几乎很少的去修改代码。

4.节省了bean的维护工作,项目中几乎找不到bean了。

5.和spring一脉相承,不需要额外的配置来转化bean,以及额外的bug,(这里说的是spring jdbc)

map的缺点:

1.不直观,开发人员不清楚map里有什么字段,每个字段具体是什么数据类型,前提是知道表结构。

2.使用表单validation框架时,需要创建表单bean

3.每次取值的时候都要手写字段名称,有时需要强制类型转换,如果用bean就没有这个痛点了。

4.难维护

5.项目大了以后,玩分模块,玩微服务,痛点更明显

6.项目大了之后,在不同的地方调用db返回的数据,自己都不知道应该查哪个字段

7.一旦字段更改后,如果有地方想不到,那就会造成隐藏bug,如果用bean的话,直接eclipse就会报错,减少bug几率。

8.put/get数据的时候频率是很高的,Map的话,get还需要写字段,每次put和get的时候都要编写大量代码,以及类型转换。

9.数据库一变更之后,大面积的map.put/get 都不报错,自己也不知道该改哪里,不该改哪里。一启动服务后全是错,但是用bean,直接就会出红叉,知道该改哪里。

------------------------------------------------
bean的优点:

1.直观,开发人员清楚的知道bean里有什么字段,什么类型。
2.使用表单validation框架时,可以直接使用已生成的bean
3.新人上手快
4.易维护

bean的缺点:

1.多表联查的时候还需要自己创建bean(看你的sql复杂不复杂,也可以考虑建大bean来解决)
2.开发效率不是很高(在频繁修改数据库的情况下,会带来额外的代码修改工作量)。

------------------------------------------------

尾声:

之前在我用Map开始干的时候,也询问过一些朋友,大家总体的反应是小项目用map玩玩可以,但是大项目就要用bean。

现在想想。。。拉倒吧,小项目也别用map了,好习惯早养成。

我当时没在乎,我就是想试试到底有多痛。。。

结果真的很痛。。。

后来痛的要死的时候,发现其实spring jdbc是原生支持玩bean的,结果花了2天一股脑又封了一个基于bean的baseDao,现在项目里是既有bean,又有map。

慢慢来吧,少年。

好啦,这就是我要给你们讲的map和bean的故事。

------------------------------------------------

给大家讲一个关于map和bean的故事(在SpringJdbc玩map被玩死)相关推荐

  1. 技术直播:讲一个Python编写监控程序的小故事

    今年疫情"黑天鹅"事件改变了大家的生活.相信大家都经历过,每天早晨起床第一件事,就是查看数据.这些数据不仅仅是人们对活着的渴望,也是在建立对战胜疫情的决心. 那么技术人怎么能通过自 ...

  2. a豆:在讲一个珍重每一个人的故事

    人类史上最重要的标志性节点,是工具的产生及应用.曾几何时,人与工具之间的区隔非常明显,人不会过分依赖工具,而工具也只是人的一个"帮手".然而随着科技的不断进步发展,在享受科技带来生 ...

  3. 用ChatGPT讲一个关于猴子的故事

    今天让ChatGPT编了一个小猴子的故事,效果还不错. 首先设置目标: Goal 1: 讲一个关于猴子的故事 Goal 2: 童话故事 Goal 3: 寓言 Goal 4: 讲给小朋友听的 Goal ...

  4. 一个古帝国做产品的故事

    作者:杭州研究院·王安稳 今天给大家讲一个古帝国做产品的故事,说的不好别笑话啊. 产品:青苗法 需求方:北宋帝国.屁民 产品经理:宋神宗 交互设计师:王安石 一.需求 1068年8月17日,京城地震! ...

  5. 一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?

    本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等. Spring ...

  6. Ambiguous mapping found. Cannot map 'xxxxController' bean method

    1.背景 今天要做一个demo,从github上clone一个springmvc mybatis的工程(https://github.com/komamitsu/Spring-MVC-sample-u ...

  7. java vo转map_JAVA Map转换为Bean或VO

    JAVA Map 转换为 Bean 或 VO Java.util 中的集合类包含 Java 中某些最常用的类. Map 提供了一个更通用的元素存储方 法. Map 集合类用于存储元素对(称作 &quo ...

  8. 讲一个常用的JDK8的STREAM超实用技巧

    JDK8的集合STREAM JDK8的Stream 背景 想暴富 开始操练代码 操练结局 总结使用技巧 JDK8的Stream JAVA开发小伙伴们应该使用JDK8好多年了, 但是STREAM有很多小 ...

  9. php 三消map 生成算法,UGC三消 一个H5布局的虎牙直播故事

    UGC三消 一个H5布局的虎牙直播故事 一.官网直播的页面效果 二.虎牙的数据接口文档API 三.后台Controller提供主播及直播数据 package com.xmbl.ops.controll ...

最新文章

  1. 【HDU】2087 剪花布条 (KMP算法的应用)
  2. AOP具体的实现写法
  3. tesseract 识别中文字符
  4. 理解并取证:DLS网络架构和PPPOE数据帧
  5. glassfish_具有GlassFish和一致性的高性能JPA –第2部分
  6. oracle 对应的JDBC驱动 版本
  7. 摄像头夜间拍摄画面有拖影_让客厅秒变健身房,OPPO智能电视R1+摄像头上手体验...
  8. Android Service LifeCycle
  9. python安装os模块_centeros安装python3过程
  10. echo -e <<EOF $()三种操作的意义
  11. 卸载mysql的步骤_卸载MySQL数据库的完整步骤(图)
  12. oracle报错ora-12162,sqlplus登录提示:ORA-12162错误
  13. 你需要的不是实时数仓 | 你需要的是一款强大的OLAP数据库(下)
  14. 医学影像技术要学计算机吗,医学影像学和医学影像技术的区别
  15. 医学统计python之ROC比较:Delong test
  16. 周星驰vs韩寒vs宁浩…Python告诉你春节该看哪部电影
  17. P4747 [CERC2017]Intrinsic Interval
  18. 面试必考:在 Java 中如何利用 redis 实现一个分布式锁服务
  19. Python的特殊属性和用法
  20. WinCE 6.0 禁用触摸屏的几种方法

热门文章

  1. 畅购商城 04商品发布
  2. Arm物联网全面解决方案加速产业创新,赋能开发者多样化市场
  3. 搭建商城系统应该注意什么问题?
  4. myEclipse8.5注册码
  5. 南红镶嵌的方法有哪些
  6. oracle修复工具下载,Oracle数据库恢复工具DataNumen Oracle Recovery
  7. 用Python机器人监听微信群聊
  8. 抖音视频突然播放量少了很多,抖音限流怎么查看?
  9. 为什么都推崇测试先行?论软件测试先行的12个好处
  10. 此应用程序当前处于脱机状态