5.1 Spring Boot 中的 SQL 分类

在 Spring Boot 官方start.spring.io 中的 SQL 分类下有16个 starter,为开发人员提供了数据库访问方方面面的支持,极大的简化了开发配置工作。

从常见数据库的驱动依赖到 JDBC API(通过 jdbcTemplate)再到 MyBatis 持久 ORM 框架,都提供了完善的 starter 支持。还进一步提供了 Spring Data 项目在 SQL 方面的支持。

Spring Data 的任务是为数据访问提供一个熟悉的、一致的、基于 Spring 的编程模型,同时仍然保留底层数据存储的特殊特性。

它使使用数据访问技术、关系数据库和非关系数据库、map-reduce 框架以及基于云的数据服务变得容易。这是一个伞形项目(umbrella project),包含许多特定于给定数据库的子项目。这些项目是通过与这些令人兴奋的技术背后的许多公司和开发人员合作开发的。

本章,我们会从最简单的 jdbcTemplate 开始介绍,然后介绍 MyBatis 集成及其分页插件。出于分享的目的,最后简要介绍了 MyBatis 加强框架(MyBatis-Plus),感兴趣的同学可以参照其官方文档进行系统性学习。

本章不介绍 Spring Data JPA 方面的内容,虽然其是一个非常强大的框架,提供了非常多的“基于约定”的数据库操作。但正是因为其封装“厚实”,不便于开发过程中对其进行细微调整,也不便于 DBA 对整个组织、整个项目的数据库架构设计进行规范化管理,所以我们在实际项目中使用得非常少。

当然,后续我们介绍 Spring Boot 对 NoSQL 方面的支持时,会使用 Spring Data Redis、Spring Data MongoDB 这些启动器的。

下一节:原生的 jdbc 操作并不友好:需要自己加载驱动、创建连接、写数据库查询/新增/修改/删除的 SQL(或调用存储过程)、自己控制事务、完成从数据库返回的 ResultSet(java.sql.ResultSet)中取数(字段值)并且再把这些数存放到对象中。整个过程比较复杂,经常重复,并且没有什么技术含量。

针对这种情况,各种 ORM( Object Relational Mapping, 对象关系映射)技术应运而生,解决关系数据库到 java 对象的匹配问题。在这个领域中,经常使用到的有 JPA、Hibernate、MyBatis 等 ORM 框架。

当然,在大部分项目情况下,我们都会直接使用更加强大的持久化框架来访问数据库,比如 MyBatis、Hibernate 或者 Spring Data JPA,但有的时候在项目中也会直接用到原生 jdbc 来操作数据库。我现在能够想到的唯一原因,就是原生 jdbc 直接、小巧、不引入第三方库。

但是,在 Spring 应用中,直接使用 jdbc 方式已经几乎见不到了。为了方便,Spring 对数据库的操作在 jdbc 上面做了更深层次的封装(也是非常薄的一层封装)。

Spring 封装提供的 JdbcTemplate 就是一个操作数据库的便捷工具。我们可以借助 JdbcTemplate 来执行所有数据库操作,例如插入,更新,删除和从数据库中检索数据,并且有效避免直接使用 jdbc 带来的繁琐编码工作。