我所见的orm映射对比

我所见的orm映射对比

前言

笔者在开发和学习中接触了5种orm框架,他们各有各的优缺点,应用的场景也不一样。下面对这五种orm大体状况进行表述。

1.原始jdbc

原始jdbc是所有java orm映射的底层封装实现的代码,它通过数据库驱动java类字符串反射初始化驱动来创建连接。在执行完对应的sql后传递到resultset,再通过循环来封装到对应的实体类中。其优点在于可以直接迅速地执行sql,灵活将结果转换为实体类或者vo、dto,但缺点是数据库连接资源利用率不高,同时代码繁琐,开发成本高。

2.queryRunner

queryRunner是apache公司出来commons-dbutils的对jdbc进行简单封装的框架,它消除了繁琐的jdbc代码转换,整合数据库连接池,灵活将结果转换为实体类或者vo、dto。然而,其缺点在于不支持缓存造成查询效率低下,跨平台性低。

3.springJdbc

Springjdbc是spring家族的一份子。它简单地封装了原始jdbc,还可支持第三方数据库连接池,灵活将结果转换为实体类或者vo、dto。然而,其缺点在于不支持缓存造成查询效率低下,跨平台性低,依赖于spring。

4.Hibernate

Hibernate是一种全自动化面向对象地数据库orm映射框架,它对jdbc代码进行了彻底地面向对象封装,跨平台性高。不仅支持第三方数据库连接池整合,还引入了一级和二级缓存。比如对实体类基本的增删改查进行了封装,省去了大量sql语句。其优点在于简化了java代码,相对于原始jdbc和前面地queryRunner、springjdbc来讲,不用频繁查询数据库,提高了效率。然而,它也有缺点,就是学习成本高,对于关联查询和批量增删改数据库来将效率低下,容易暴露敏感数据,不利于人工优化sql,且不支持存储过程,查询的数据映射方法不灵活,需要查询后人工转换,效率和性能低下。笔者在老东家深绘就是用的这个框架,后期因为它性能的低下以及笔者思想的保守导致最后辞职和放弃。

5.Mybatis

mybatis是一个半自动化地orm框架,不仅封装了原始jdbc,还可以在把sql语句、实体类映射和java代码分离,便于修改和优化sql,同hibernate一样支持一级二级缓存,整合第三方数据库连接池。与此同时,它也支持存储过程。而且它也整合了queryRunner、springjdbc及原生jdbc的优点就是灵活将结果返回为实体类或者vo、dto,不用查询后频繁转换,提升了性能。但是原始的mybatis缺点在于跨平台性差,需要整合第三方插件来实现相关的功能,比如分页插件pagehelper来实现跨平台分页的方言转换。为了克服原生mybatis的缺陷,mybatis支持插件的扩展和封装。笔者最近看上并使用的mybatis-plus就是在原生mybatis基础上加入了插件进行扩展,融合了hibernate的面向对象映射和基本增删改查,还提供了比pagehelper更好的分页插件pageinterceptor。

小结

总而言之,orm框架相对于原始的jdbc来说,简化了代码,提升了数据库连接池的利用率。如果对于关联查询方面要求高的且业务复杂的,笔者建议使用mybatis框架。笔者最不建议使用的就是原始的jdbc,它的代码繁琐度高,而且没有缓存,对数据库的压力很大的。而对于业务简单性能要求不是很高的,其他3种都可以选择的,如果要求有缓存的,还是建议用hibernate或者mybatis。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值