[适合初中级Java程序员修炼手册从0搭建整个Web项目](十)

简介: 前言文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206种一棵树最好的时间是十年前,其次是现在

six-finger-web


一个Web后端框架的轮子从处理Http请求【基于Netty的请求级Web服务器】 到mvc【接口封装转发)】,再到ioc【依赖注入】,aop【切面】,再到 rpc【远程过程调用】最后到orm【数据库操作】全部自己撸一个(简易)的轮子。

github

https://github.com/bin392328206/six-finger-web


为啥要写这个轮子

其实是这样的,小六六自己平时呢?有时候喜欢看看人家的源码比如Spring,但是小六六的水平可能不怎么样,每次看都看得晕头转向,然后就感觉里面的细节太难了,然后我就只能观其总体的思想,然后我就想我如果可以根据各位前辈的一些思考,自己撸一个简单的轮子出来,那我后面去理解作者的思想是不是简单点呢?于是呢 six-finger-web就面世了,它其实就是我的一个学习过程,然后我把它开源出来,希望能帮助那些对于学习源码有困难的同学。还有就是可以锻炼一下自己的编码能力,因为平时我们总是crud用的Java api都是那些,久而久之,很多框架类的api我们根本就不熟练了,所以借此机会,锻炼一下。


特点

  • 内置由 Netty 编写 HTTP 服务器,无需额外依赖 Tomcat 之类的 web 服务(刚好小六六把Netty系列写完,顺便用下)
  • 代码简单易懂(小六六自己写不出框架大佬那种高类聚,低耦合的代码),能力稍微强一点看代码就能懂,弱点的也没关系,小六六有配套的从0搭建教程。
  • 支持MVC相关的注解确保和SpringMVC的用法类似
  • 支持Spring IOC 和Aop相关功能
  • 支持类似于Mybatis相关功能
  • 支持类似于Dubbo的rpc相关功能
  • 对于数据返回,只支持Json格式


絮叨

前面是已经写好的章节,下面我给大家来一一走一遍搭建流程

这个系列已经是第十篇了,感谢每一个给我点赞的人,因为你们就向明灯,指引着我一起前进,让我知道,学习的路上并不孤独,还有很多你一样的人跟你在一起学习呢? 我们前面一起学习了Netty 做Http服务 MVC的实现  IOC  AOP的实现 还有我们RPC的实现,今天我们就把Web剩下的ORM实现了,今天先实现一个简单的ORM吧!


来看看实现之后的结构


网络异常,图片无法展示
|


这个是Mybatis的实现

其实呢 我感觉基本上所有的web框架的组件 基本上分2步走 一个是我们初始化的步骤,还有一个就是我们流程的执行过程。就这2种

其实核心就几个

  • SqlSession 围绕者它的 SqlSessionFactory 等
  • Configuration 这个类 里面有MapperRegistry
  • executor 执行器等

我们从头来看吧,首先我们看pom,我们依赖了哪些依赖

网络异常,图片无法展示
|


然后我们看测试类,看源码肯定是有主流程,不然太蒙b了

网络异常,图片无法展示
|


这块是测试类,然后小六六自己画个流程图,把这几个测试类的过程所涉及的给大家画一下。

网络异常,图片无法展示
|


这个是主流程,具体的细节,后面小六六根据核心测试代码一行一行给大家分析,当然我这个也是很简单的版本,所以就简单分析分析。


SqlSessionFactoryBuilder.build

网络异常,图片无法展示
|


我们来看看这行代码

网络异常,图片无法展示
|


其实很简单,就是先读取我们的配置文件了,把我们的配置文件变成我们的对象。

网络异常,图片无法展示
|


然后返回的是一个接口的实现,嗯,这个叫里氏替换吧。哈哈

然后我们看看实现类的构造方法

网络异常,图片无法展示
|

它里面的loadMappersInfo,就是类似于我们现在mybatis的mapperScan,我相信大家应该都是很熟悉的拉,

网络异常,图片无法展示
|

就是遍历文件夹,然后看看文件夹下面的mapper,然后把mapper 变成一个mapper存起来,也把xml也解析了

网络异常,图片无法展示
|


然后里面还定义了 我们接口的方法合xml的方法对应的联系就是sqlId ,所以我们在写代码的时候

SqlSession session = factory.openSession();

网络异常,图片无法展示
|


接口的实现类是 DefaultSqlSessionFactory ,然后 new DefaultSqlSession

那么我们看看 DefaultSqlSession的构造。

网络异常,图片无法展示
|


它new 了一个SimpleExecutor ,那么来看它的构造,然后发现它还有一个static 的方法,这个方法也是要跑的

网络异常,图片无法展示
|


网络异常,图片无法展示
|

发现其实就是做了数据库的连接

UserMapper userMapper = session.getMapper(UserMapper.class);

然后就是这行代码了,这行代码其实就是生成了我们接口mapper的代理对象,让代码对象去执行真正的sql流程。

我们来看 getMapper

网络异常,图片无法展示
|

网络异常,图片无法展示
|

先来解析一下这2个,因为我们前面就已经把Mapper 存到本地上下文环境了,那么现在就是去获取这个mapper的过程

网络异常,图片无法展示
|

网络异常,图片无法展示
|

然后通过mapper 来生成我们的代理对象,这边用的是JDK动态代理

网络异常,图片无法展示
|


User user = userMapper.getUser("1");

然后我们看执行过程,因为我们知道呀,它这个是生成的代理对象,所以呢?我们就要看它的invoke 方法咯

网络异常,图片无法展示
|


然后大家看哈,最后执行的是            return  this.execute(method, args);

网络异常,图片无法展示
|

很简单,根据接口的路径+上方法名称,找到对应的statementId,然后找到我们之前解析的xml,然后再把我们接口的参数替换掉,最好再执行sql,

网络异常,图片无法展示
|

网络异常,图片无法展示
|

这个就是sql执行的整体过程了,包含了jdbc的所以流程,其实orm框架就是要简化的就是这些流程,还有执行之后的数据封装等等,都在这个方法里面,大家有兴趣的把代码拿下来,慢慢看,我就不一一说了,整个orm的流程也就是这样的。


结尾


嗯,这个轮子的大致代码是完成了,但是很多细节小六六并没有去深挖,只是说自己把大部分的流程走通了,学习嘛,总是一直要学的,所以这个系列我暂时学到这,后面再看了,希望这个系列对各位有帮助就好了。感觉大家的支持。

相关文章
|
9天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
8天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
22 0
|
13天前
|
前端开发 Java UED
JSF遇上Material Design:一场视觉革命,如何让传统Java Web应用焕发新生?
【8月更文挑战第31天】在当前的Web开发领域,用户体验和界面美观性至关重要。Google推出的Material Design凭借其独特的动画、鲜艳的颜色和简洁的布局广受好评。将其应用于JavaServer Faces(JSF)项目,能显著提升应用的现代感和用户交互体验。本文介绍如何通过PrimeFaces等组件库在JSF应用中实现Material Design风格,包括添加依赖、使用组件及响应式布局等步骤,为用户提供美观且功能丰富的界面。
21 0
|
13天前
|
开发者 安全 SQL
JSF安全卫士:打造铜墙铁壁,抵御Web攻击的钢铁防线!
【8月更文挑战第31天】在构建Web应用时,安全性至关重要。JavaServer Faces (JSF)作为流行的Java Web框架,需防范如XSS、CSRF及SQL注入等攻击。本文详细介绍了如何在JSF应用中实施安全措施,包括严格验证用户输入、使用安全编码实践、实施内容安全策略(CSP)及使用CSRF tokens等。通过示例代码和最佳实践,帮助开发者构建更安全的应用,保护用户数据和系统资源。
26 0
|
13天前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
22 0
|
13天前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
25 0
|
13天前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
25 0
|
21天前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
弹性计算 数据可视化 关系型数据库
阿里云服务器部署Java Web项目和连接MySQL数据库全流程
阿里云服务器部署Java Web项目和连接MySQL数据库全流程
5547 0
阿里云服务器部署Java Web项目和连接MySQL数据库全流程
|
20天前
|
Java 开发工具 git
【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因
【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因