Java开发为什么选择ORM框架而不用JDBC呢(通常来说)?

1.前言

在使用Java开发中,大概率会与数据库交互,在很早时候,我们使用JDBC(Java Database Connectivity)来执行SQL语句和访问数据库。后来,随着ORM(Object-Relational Mapping)框架的出现,我们就没有直接使用JDBC了,而是用封装了JDBC的ORM框架,并提供了更高级别的抽象,以简化数据库操作。那两者有什么区别,以及为什么在企业开发中基本都使用ORM框架而不是直接使用JDBC呢?接下我我们一起看看。

2.什么是JDBC

维基百科是这样说的:Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC是面向关系型数据库的。

3.JDBC 存在的问题

  1. 代码重复与繁琐

    • 每次进行数据库操作时,都需要手动执行一系列相同的步骤,如加载驱动、建立连接、创建Statement或PreparedStatement、执行SQL、处理结果集、最后关闭连接等,这些步骤构成了所谓的“六步走”流程,增加了代码量和重复性。
  2. 违反开闭原则

    • SQL语句直接嵌入在Java代码中,当业务逻辑变化需要调整SQL时,开发者必须修改源代码、重新编译、重新部署,这不符合软件工程中的开闭原则(Open/Closed Principle, OCP),即对扩展开放,对修改关闭。
  3. 安全性问题

    • 如果不恰当使用字符串拼接来构造SQL语句,容易导致SQL注入攻击,降低了应用的安全性。
  4. 硬编码与可维护性

    • SQL语句硬编码在Java代码中,使得数据库逻辑与业务逻辑紧密耦合,不利于代码维护和分工合作。
  5. 扩展性与灵活性不足

    • 针对不同的查询条件,预编译的PreparedStatement虽然可以防止SQL注入,但其参数化部分仍可能导致SQL语句结构不够灵活,尤其是在条件组合多变的情况下。
  6. 资源管理问题

    • 连接管理不当,如频繁地创建和销毁数据库连接,可能会消耗大量数据库资源,降低系统性能。
  7. 结果集处理复杂

    • 结果集(ResultSet)的遍历和转换成具体业务对象的过程较为繁琐,尤其是面对复杂的查询结果时,需要编写大量的重复代码进行数据映射。

4.怎么解决JDBC的问题呢?

那么就是这篇文章提到的另一个东西了,那就是ORM(对象关系映射)框架,例如Hibernate、MyBatis等,它们提供了一种更高级别的抽象层,可以简化数据库操作,提高代码复用率和安全性,并且更好地遵循软件工程的最佳实践。

5.总结

看了上面的内容,那我们就基本知道Java开发为什么基本选择ORM框架而不用JDBC了
主要原因在于解决开发效率、代码可读性和可维护性、以及减少重复劳动等方面的问题。以下是几个关键点:

  1. 抽象层次提升

    • ORM框架将底层的数据库操作抽象出来,允许开发者以面向对象的方式操作数据库,无需关注具体的SQL执行细节,比如打开和关闭连接、创建和执行SQL语句等。
  2. 对象关系映射

    • ORM实现了对象模型与数据库表之间的映射,使开发者能够直接操作领域对象,而不是原始的数据行。这样可以直接把Java对象持久化到数据库中,或者从数据库中加载数据到Java对象,大大减少了数据转化的工作量。
  3. 易用性与开发效率

    • ORM提供了强大的查询能力,通常支持类型安全的查询构建,避免了SQL语法错误和SQL注入风险。此外,许多ORM还支持延迟加载、关联关系管理和事务管理等功能,进一步简化了开发过程。
  4. 代码可读性与可维护性

    • 使用ORM,代码更加清晰和简洁,业务逻辑与数据库访问逻辑分离,有助于提高代码质量,方便后期维护和团队协作。
  5. 减少冗余与自动化处理

    • ORM框架能自动处理很多常规的CRUD(创建、读取、更新、删除)操作,减少手写重复SQL语句的工作量,同时自动管理数据库连接池和缓存,优化资源使用。
  6. 移植性与扩展性

    • ORM框架往往能在不同数据库之间提供更好的兼容性和移植性,如果更换数据库,只需配置文件的改动,而不需要大规模修改代码中的SQL。
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书语时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值