目录:
一、什么是持久层框架
二、Spring Boot数据持久层技术
三、面试范例
四、Spring Boot整合
五、持久层框架选择
六、DAO数据持久层
七、总结
一、什么是持久层框架
Web持久层框架是一种软件服务,将应用程序与其使用和操纵的数据源分离。持久层框架位于机构的数据源之上,隐藏访问这些数据源的数据访问API(如JDBC,JDO或实体EJB)。提供的服务应完全抽象和从这个数据源使用和操纵数据的物理细节。简单来说,持久层就是完成和数据库交换内容的结构,对数据库进行增删查改。
二、Spring Boot数据持久层技术:
- MyBatis
- JdbcTempTate(Spring Boot自带)
- Spring Data Jpa规范
三、面试范例
面试官:Spring Boot的持久化技术有哪些?如何配置多数据源?
https://zhuanlan.zhihu.com/p/205125586
四、Spring Boot整合
1、Spring Boot整合JdbcTempTate
原生JDBC进行数据操作,代码冗余度高。Spring 针对此问题封装了JdbcTemplate,它可以通过
Spring注入功能将数据源注入IdbcTemplate中,Spring 中的IOC容器可以将数据源当作Java
Bean进行管理,完成代码简化。
2、Spri ngBoot整合Mybatis
Mybatis持久层框架同样封装了jdbc操作细节,开发人员秩序关注sq1语句,无需关注注册驱动、创
建链接等过程,使用ORM ( object Relational Mapping, 即对象/关系数据库映射)思想实现对结
果集的封装。
3、Spring Boot整合Jpa
Jpa(Java Persistence API )是SUN公司提出的ORM规范,提供了一种对象/映射工具来管理Java应
用中的关系数据,使用XML或者注解的方式简化对数据库的操作。
它的出现是为了规范现有的ORM框架,采用Jpa开发时,我们仍将使用这些ORM框架,只是此时开发出来的应用不在依赖于某个持久化提供商。应用可以在不修改代码的情况下载任何JPA环境下运行,真正做到低耦合,可扩展的程序设计。类似于JDBC,在JDBC出现以前,我们的程序针对特性的数据库API进行编程,但是现在我们只需要针对JDBC API 编程,这样能够在不改变代码的情况下就能换成其他的数据库,而Spring-Data-jpa是在Jpa规范下提供的Resporsity实现。JpaResporsi ty拥有常用的CURD方法及分页、字段排序等,可以统- -不同 ORM框架对数据库操作的代码。
五、持久层框架选择
1、从用户数量看,主流的选择是JPA和MyBatis, JPA 使用Hibernate作为默认实现,因此就是Hibernate和MyBatis的选择。
2、关注度:
根据谷歌数据, JPA全球用户数量最多,但国内MyBatis用户数更多。
3、Hibernate特点
- 全自动的技术框架,无需维护SQL。
- 偏向于对象操作,从对象的角度更容易开发维护。
- 因SQL生成是自动的,所以在切换不同数据库时更容易,数据库移植性更好。
- 缓存机制优于MyBatis。
4、MyBatis特点
- 需要维护SQL,算是半自动化技术框架,但因此也可以更自由的进行SQL定制。
- 在学习SQL较为精通时,更容易掌握。
- 切换数据库有较大的维护工作量,因不同的数据库SQL写法存在区别。
5、如何选择
- SQL基础不好,或者习惯了其他的等无需SQL维护的ORM框架如EF时,选择JPA
- SQL熟练掌握则可选择MyBatis,毕竟国内使用者众多
6、MyBatis流程示例
- pom. xm1添加依赖
- 添加创建数据库架构的sq|文件,并在其中写create table 这样的语句
- yml文件中配置数据连接,配置spring . datasource. schema指向上一步的架构sq|文件
- 创建实体类,如user
- 添加mapper接口, 接口方法实现有两种方式
可在接口方法上通过如@Select|@Update|@Delete注解写sql语句
或者使用mapper配置文件
在业务层或者Controller中直接使用mapper的接口对象进行crud操作。
六、DAO数据持久层
按照Spring Data规范,查询方法以find工read I get开头, 涉及条件查询时, 条件的属性用条件关键字连接,要注意的是:条件属性以首字母大写。在接口中只需要声明符合规范的方法,即拥有对应的功能,如下表所示为方法中支持的关键字:
1. 添加repositories文件夹
2. 添加UserRepository接口
- 继承JpaRepository接口,两个类型参数分别时User类和主键类型UUID
- 继承的上述接口包含了CRUD方法,一般的数据访问即可直接使用
- 声明一个findUserByUserNameAndPassword方法,返回User对象
- 声明一个countByUserName方法,返回该用户名在数据库中的记录数
3. 添加UserProjection接口,使用投影选取特定的User字段
- 添加一个getSalt方法,返回用户注册时的随机salt
- 在UserRepository中添加一个findUsersByUserName方法,返回用户数据的salt投影,用于用户登录时salt验证
七、总结
通过学习Web持久层框架,了解到:
1. 数据库连接和操作:学习了如何建立与数据库的连接,执行SQL查询和更新操作,以及关闭数据库连接。这包括了解不同类型的数据库(如MySQL、PostgreSQL、Oracle等)以及如何使用相应的驱动程序进行连接。
2. ORM(对象关系映射):了解了ORM的概念,它是一种将数据库表映射到Java类的技术。通过使用ORM框架(如Hibernate、MyBatis等),可以更轻松地在Java代码中操作数据库,而无需编写繁琐的SQL语句。
3. CRUD操作:学习了创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据的基本操作。这些操作是大多数Web应用程序的核心功能,因此掌握它们是至关重要的。
4. 事务管理:了解了事务的概念,它是一组数据库操作的原子性单元。学习了如何在Web应用程序中使用事务来确保数据的一致性和完整性。
5. 缓存:学习了如何使用缓存技术(如Redis、Ehcache等)来提高Web应用程序的性能。缓存可以减少对数据库的访问次数,从而提高响应速度。
6. 分页和排序:学习了如何在Web应用程序中实现分页和排序功能,以便用户可以更方便地浏览大量数据。
7. 安全性:了解了如何保护Web应用程序免受SQL注入、跨站脚本攻击(XSS)等安全威胁。学习了如何使用预编译语句、输入验证和转义等技术来提高应用程序的安全性。
8. 性能优化:学习了如何优化Web应用程序的性能,包括减少数据库查询次数、使用索引、优化SQL语句等方法。
9. 测试:了解了如何为Web持久层框架编写单元测试和集成测试,以确保代码的正确性和稳定性。
10. 设计模式:学习了一些常用的设计模式,如单例模式、工厂模式、代理模式等,这些模式可以帮助我们更好地组织和管理Web持久层代码。