当前位置:   article > 正文

今日份学习之Spring Boot 数据访问实现原理,太牛了_spri.g boot中访问数据库原理

spri.g boot中访问数据库原理

代码清单11-5Neo4j连接服务器部分源代码

2数据存取功能实现原理

===========

与数据库服务器建立连接之后,就可以对数据库执行一些存取操作,对数据库实现管理的功能。数据存取的操作大体上都包含两个方面的内容,即实体建模和持久化。不管是关系型数据库,还是NoSQL数据库,都遵循这一设计规范。

2.1实体建模源代码分析

实体建模的原理简单地说,即将Java的普通对象和关系映射为数据库表及其相关的关系。而这种映射在Spring Boot中,主要是通过注解的方式来实现。几种数据库中主要的注解定义如表11-1所示。

表11-1 实体建模主要注解定义

这种映射机制是双向的,当向数据库存入数据时,是将Java对象映射为数据库对象,而从数据库取出数据时,却将数据库中的数据还原为Java对象。

例如对于Neo4j来说,在实体建模中的主要注解@NodeEntity 的定义如代码清单11-6所示。在一个类定义中使用这个注解,表示这个类定义就是一个节点实体的建模。

代码清单11-6@NodeEntity源代码

Neo4j是一个图形数据库,所以程序中的实体对象要存入数据库时,将被映射为数据库图形。代码清单11-7是这种映射的部分实现代码。它的实现原理是,将实体对象转化为数据库可以识别的查询语句,实现对象到数据的转换。

代码清单11-7实体对象映射为数据库图形的部分源代码

当从Neo4j数据库中读取数据时,Neo4j将数据库中的图形还原为实体对象。代码清单11-8是实现这种功能的部分源代码,即将从数据库中查询得到的数据集合转化为实体对象,实现从数据到对象的转换。

代码清单11-8数据库中图形还原为实体对象的部分源代码

2.2持久化实现原理

关系型数据库都使用了JPA的一套执行标准,它结合使用Hibernate实现了实体的持久化。后续的数据库管理设计都遵循了JPA这一个标准规范,提供相同的访问数据库的API。图11-1是JPA、MongoDB 、Neo4j三种不同的资源库接口定义的相同的继承关系。

这就不难理解,为什么在Spring Boot 中使用数据库,对于不同种类的数据库,几乎都可以使用相同的方法来访问。但是,上面不同数据库的资源库接口定义虽然有相同的继承关系,它们的实现方法却是不同的,JPA由 SimpleJpaRepository实现了JpaRepository,如代码清单11-9所示。

代码清单11-9JPA数据库持久化源代码片段

而对于Neo4j来说,它使用GraphRepositoryImpl实现了GraphRepository,如代码清单11-10所示。

代码清单11-10Neo4j数据库持久化源代码片段

3 扩展数据存取的功能

===========

使用数据库是应用系统最基本的功能需求,同时也是最频繁和最复杂的功能需求。Spring Boot始终以使用简单为基准,提供了一套以JPA的标准规范来设计的数据存取方法,虽然功能相当强大,但往往不能适合一些复杂的功能需求,这就需要对数据存取的功能做一些扩展。了解Spring Boot使用数据库的实现原理之后,要扩展数据存取的功能就比较容易了。

3.1 扩展JPA功能

根据数据库持久化的原理,可以扩展数据存取的功能,例如在第4章中,实现了扩展JPA的功能,如代码清单11-11所示。数据库持久化的接口实现类ExpandJpa-RepositoryImpl,它继承了SimpleJpaRepository 的实现,扩展了JPA访问数据库的功能。

3.2扩展Neo4j功能

遵循JPA标准规范来设计,这对于新型的Neo4j数据库来说是一个挑战。在JPA中,可以使用如下定义来执行一个分页的查询:

Query ( “select t from User t where t.name like :name” )

Page findByName(@Param ( " name") String name,Pageable pageRequest);

但是这种方法对于Neo4j来说,却会导致严重的错误,如下定义是无法被正常执行的:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

image

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

image

PC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

[外链图片转存中…(img-7y3ZyhBO-1712002456858)]

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号