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 存在的问题
-
代码重复与繁琐:
- 每次进行数据库操作时,都需要手动执行一系列相同的步骤,如加载驱动、建立连接、创建Statement或PreparedStatement、执行SQL、处理结果集、最后关闭连接等,这些步骤构成了所谓的“六步走”流程,增加了代码量和重复性。
-
违反开闭原则:
- SQL语句直接嵌入在Java代码中,当业务逻辑变化需要调整SQL时,开发者必须修改源代码、重新编译、重新部署,这不符合软件工程中的开闭原则(Open/Closed Principle, OCP),即对扩展开放,对修改关闭。
-
安全性问题:
- 如果不恰当使用字符串拼接来构造SQL语句,容易导致SQL注入攻击,降低了应用的安全性。
-
硬编码与可维护性:
- SQL语句硬编码在Java代码中,使得数据库逻辑与业务逻辑紧密耦合,不利于代码维护和分工合作。
-
扩展性与灵活性不足:
- 针对不同的查询条件,预编译的PreparedStatement虽然可以防止SQL注入,但其参数化部分仍可能导致SQL语句结构不够灵活,尤其是在条件组合多变的情况下。
-
资源管理问题:
- 连接管理不当,如频繁地创建和销毁数据库连接,可能会消耗大量数据库资源,降低系统性能。
-
结果集处理复杂:
- 结果集(ResultSet)的遍历和转换成具体业务对象的过程较为繁琐,尤其是面对复杂的查询结果时,需要编写大量的重复代码进行数据映射。
4.怎么解决JDBC的问题呢?
那么就是这篇文章提到的另一个东西了,那就是ORM(对象关系映射)框架,例如Hibernate、MyBatis等,它们提供了一种更高级别的抽象层,可以简化数据库操作,提高代码复用率和安全性,并且更好地遵循软件工程的最佳实践。
5.总结
看了上面的内容,那我们就基本知道Java开发为什么基本选择ORM框架而不用JDBC了
主要原因在于解决开发效率、代码可读性和可维护性、以及减少重复劳动等方面的问题。以下是几个关键点:
-
抽象层次提升:
- ORM框架将底层的数据库操作抽象出来,允许开发者以面向对象的方式操作数据库,无需关注具体的SQL执行细节,比如打开和关闭连接、创建和执行SQL语句等。
-
对象关系映射:
- ORM实现了对象模型与数据库表之间的映射,使开发者能够直接操作领域对象,而不是原始的数据行。这样可以直接把Java对象持久化到数据库中,或者从数据库中加载数据到Java对象,大大减少了数据转化的工作量。
-
易用性与开发效率:
- ORM提供了强大的查询能力,通常支持类型安全的查询构建,避免了SQL语法错误和SQL注入风险。此外,许多ORM还支持延迟加载、关联关系管理和事务管理等功能,进一步简化了开发过程。
-
代码可读性与可维护性:
- 使用ORM,代码更加清晰和简洁,业务逻辑与数据库访问逻辑分离,有助于提高代码质量,方便后期维护和团队协作。
-
减少冗余与自动化处理:
- ORM框架能自动处理很多常规的CRUD(创建、读取、更新、删除)操作,减少手写重复SQL语句的工作量,同时自动管理数据库连接池和缓存,优化资源使用。
-
移植性与扩展性:
- ORM框架往往能在不同数据库之间提供更好的兼容性和移植性,如果更换数据库,只需配置文件的改动,而不需要大规模修改代码中的SQL。