首页 新闻 会员 周边 捐助

java中实体映射该采用哪种方式?

0
悬赏园豆:100 [已解决问题] 解决于 2018-11-08 14:03

在上一家公司我们的dao层使用的是springjdbc,没有做实体类映射,数据全部是以List<Map<String,Object>>的格式向前台返回从数据库中检索出来的数据,
后来跳槽,这家公司用的是mybatis,用一张表对应一个实体类,查询出的数据一一映射到具体的实体类中。
限于自己见识不够,不能知道两者各自优势,不能具体明白用Map和具体实体类的各自优劣,
还请大神指点。

我亦留此地的主页 我亦留此地 | 菜鸟二级 | 园豆:325
提问于:2018-11-07 14:06
< >
分享
最佳答案
0

如果不用框架,那就只能自己封装,这两种方式我觉得还是差别挺大的。
第一点就是效率:使用框架的开发效率明显高于自己封装的开发效率,一般的公司都使用框架,因为能降低开发周期,从而解决开发成本,比较大的公司自己内部会有自己的一些开发规则,再成熟一些,就是自己的一套体系,后面的人进来就只能按照那样的开发方式,因为重构代码是件很痛苦的事情,大家都想只要把自己的事情搞定,没人愿意主动重构,对公司而言,反正项目能跑,他们也不愿意花人力和经历在这种事情上,大不了下一个项目用新的就好。
第二点是复用性:如果使用框架,很多东西我们都只写一两次,别的地方都用对象封装,但是如果你使用自己封装的话,每次对数据库操作都可能牵扯到封装,同样的工作重复性太高。
第三点是灵活性:自己封装肯定是最灵活的,映射框架最早的是Hibernate吧(你可以稍微看看Hibernate的作者为什么开发Hibernate,也是一个对比),Hibernate算是最笨重的一个,所以后来的mybatis算是一个居中的框架。
第四点是开发专注度:敢问你自己如果写一个是几行的sql语句十几张表各种统计各种关联,你是什么感受?使用框架的一个好处就是程序员只用更专注的负责自己的开发逻辑,不用写复杂的sql语句。另外一点,假设我需要什么,我不管我现在能不能拿到,定义好对象,我就当它存在了,剩下的是差数据库的事情,最开始表设计出来的时候,对象就有了表里面的所有字段,我不担心我会混乱需要什么字段不需要什么字段。
所以现在大部分公司都使用框架开发。

收获园豆:100
Mario0315 | 菜鸟二级 |园豆:340 | 2018-11-07 19:30

回去想了下,大概是明白了。使用对象来映射表数据的好处可以缓存数据,将常用的数据加入缓存中成为持久化对象,减少与数据库io。之前我们用map来存放数据,用redis来缓存查询的数据,只要更新表数据,同时也会更新redis的数据,尽量减少与数据库io,但是还是做不到像hibernate一样。不知道我这样理解对不对,感谢你的回答。

我亦留此地 | 园豆:325 (菜鸟二级) | 2018-11-08 14:03

@我亦留此地: “使用对象来映射表数据的好处可以缓存数据”,其实一般情况下,一次数据最常有效期是一次请求会话,比如最常见的登陆操作,其实用到的只有username和password两个字段,那如果是封装User对象,那可能一次性得到了user的其他字段数据,虽然对当前操作没什么用,但后续可能有用,比如我们要更新的lastLogin字段,map封装的话,自己挑选字段会比较麻烦,而且后续修改的话,你也需要自己写sql,但是如果是对象封装,我们始终用的是一个对象,只需要改对象中的属性。“用redis来缓存查询的数据”,对于数据量很大,数据信息不需要实时,数据高频率变化,一般是没有什么问题,比如手机验证码之类的一般都是这样干的。缓存的目的是减少对数据库操作压力,但缓存都是在内存中,数据已丢失,如果数据实时性要求很高,缓存存在的意义也不是很大,主要就是快。hibernate内部是一级缓存和二级缓存(选配)的,mybatis没有二级缓存。hibernate和mybatis的几个主要的区别:1.hibernate 全对象封装,mybatis半对象封装;2.hibernate执行hql语句,mybatis执行sql语句;3.hibernate有强大的缓存技术支撑,mybatis的缓存没有hibernate那么强大,还有一些零零散散的差别,有兴趣可以看看,不过现在我了解的公司用mybatis + redis的方式还挺多的

Mario0315 | 园豆:340 (菜鸟二级) | 2018-11-08 18:39
其他回答(1)
0

Map和实体类的优劣?我第一想到的就是字段的名称,如果是实体类那么字段名称就是实体类的属性名,如果是map的话,key值作为字段名称不是会很麻烦吗?而且如果字段后期调整,修改起来也会更麻烦吧,这是我想到的其中一点。
至于它两还有没有别的优劣,可能还需要看项目本身或者开发团队的情况了。

让我发会呆 | 园豆:2929 (老鸟四级) | 2018-11-07 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册