热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

web轮子的最后一个orm系列了,基本上算是完成

前言

文本已收录至我的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格式

絮叨

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

  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(一)
  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(二)
  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(三)
  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(四)
  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(五)
  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](六)
  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](七)
  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](八)
  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](九)

这个系列已经是第十篇了,感谢每一个给我点赞的人,因为你们就向明灯,指引着我一起前进,让我知道,学习的路上并不孤独,还有很多你一样的人跟你在一起学习呢?我们前面一起学习了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的流程也就是这样的。

结尾

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

日常求赞

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是真粉

创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章

六脉神剑 | 文 【原创】如果本篇博客有任何错误,请批评指教,不胜感激 !



推荐阅读
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
author-avatar
蓝雪帝国666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有