项目分析
项目学习地址 : BV1nE411r7TF
个人修改项目地址 : MyBlog
[项目简介]
技术
- 后端 : Spring Boot + JPA + thymeleaf模板
- 数据库 : MySQL
- 前端UI : Semantic UI框架
工具及环境
模块设计
- 页面设计
- 技术框架
- web Thymeleaf JAP MySQL Aspects DevTools
- 后端管理功能(主要)
- 前端展示功能(主要)
插件使用
- 编辑器 Markdown
- 代码高亮 prism
- 内容排版 typo.css
- 动画 animate.css
- 目录生成 Tocbot
- 滚动侦测 waypoints
- 平滑滚动 jquery.scrollTo
- 二维码生成 qrcode.js
[项目分析]
此项目使用框架SpringBoot,以此项目作为新手入门第一个项目我个人感觉不错,没有很复杂的逻辑,浅显易懂,但是相应的并不是十分完善,项目内容还有待丰富
此项目分为前端静态页面的编写,后端代码实现
前端页面的编写主要依赖于模板Semantic UI,但是由于此项目的时间非常早,相应的技术以及模板个人感觉不如Element UI或者LayUI,Bootstrap等的UI模板...页面模板主要分为管理页和展示页,均实现分页
后端实现依照MVC三层架构设有 :
- Dao层 : 持久层,主要用于实现后端与数据库交互,增删改查
- Service层 : 业务层,主要实现对数据的封装,封装一些后续可能用到的业务处理,涉及少量的业务逻辑,并将其自身作为接口供Controller调用
- Controller层 : 控制层,主要实现业务的调度以及数据的返回,接受请求以及返回数据实现与前端的交互
JPA
为什么要使用JPA?
- JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
- 查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
- 繁琐的代码问题 , 用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。
- 关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。
- 在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很费时费力的过程。
- ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。
- 采用JDBC编程,在很多时候存在效率低下的问题。
JPA优势
- 可持久化Java对象。JPA能够直接持久化复杂的Java对象,并能够使用JPQL语言进行复杂的查询。
- 使用简单。
- JPA使用注释(Annotation)定义Java对象与关系数据库之间的映射,而传统的ORM多使用xml配置文件。JPA使用起来比ORM要方便。使用JPA不用关注底层使用什么数据库。
- 规范标准化。JPA是JCP组织发布的,是Java官方规定的统一的API。目前已经有多种框架实现JPA标准。使用了JPA的系统可以自由选择遵循JPA标准的框架,并能够自由更换。
- 事务性、大数据量。JPA底层使用关系数据库进行存储,因此具备关系数据库的特点,例如事务性、数据完整性、并发访问、大数据量等。
- 与其他持久化技术相比,JPA有很大的技术优势。
JPA的缺点
- 因为sql语句是自动生成的可读性是比较差的
- 对于一些高级业务或者复杂的查询都需要自己来实现sql
心得 : 由于本项目未使用Mybatis,而使用JPA技术,编写实体类需要格外注意每个实体类之间的关系,使用@ManyToOne,@ManyToMany...等备注实现,同时实体类添加注解标签实现自动建表@Table(name = "User") . 同时JPA技术封装了常用的不需要编写过多的SQL语句以及Mapper文件,导致我想要将此项目由JPA转换为Mybatis项目比较困难(第一,实体类由于有定义表的关系会出现部分外键,导致实体类需要变动 第二,JPA封装了一些简单的SQL语句并且规定了相应接口的命名格式即可实现,但是对于新手去扒源码确实是一件比较吃力的事情,尤其是我对JPA自带的分页并不是很了解的情况下,并且分页的重载方法挺多的,难受)
总而言之,JPA还是外国使用的比较多,国内使用Mybatis比较多,相较于JPA,mybatis更易于新手上手,结构清晰明了,只是要注意SQL语句不要写错,而且也是手动建表,不需要在建表阶段一定考虑外键的问题,比如在Blog表加一个TagId属性就能关联Tag表,感觉轻松多了
工具类
在工具这方面此项目比较简单,只包含一个AOP实现的日志处理,一个Handler异常拦截器(用于获取异常类型,并做相应处理[返回相应错误页面]),和三个数据处理工具类(一个文本编辑器工具类,用于转换markdown格式至前端展示,一个是MD5加密,用于对用户密码进行加密[实际上此项目并没有实现用户管理,我个人感觉在此项目上添加用户管理不太安全,不要问,问就是感觉],最后是自定义的一个工具类用于获取所有属性值未空的属性名)
还有一个过滤器用于过滤未登录而进入管理员页面的用户(实际上只有管理员一个用户)
最后,此项目为Blog表定义了很多vo,用于处理blog表的部分数据,但是我感觉也封装的太多了,完全没必要
总结
最后整套代码分析下来,算是比较基础的的一套代码,没有用到很多的Springboot的配置,没有用到mybatis(难受),但是逻辑简单,处了分页我都能够快速理解
[计划]
- 先学习分页插件的使用以及原理 (由于JPA自带有分页插件,SQL语句不太好扒源码,在一个换mybatis需要使用其它的插件如Pagehelper 导致我改写mybatis从几个方向改写都有一定的问题 )
- 改写前端页面 (有尝试,但Bootstrap或者layui成套的好看博客比较少,导致去扒别人的网站源码,发现合并源码导致的css冲突真的是一个令人头大的问题,有想法等学习vue之后再上手)
- 添加用户注册
- 添加文件上传(如头像)
- 添加安全控制shiro(感觉还早呢 ╯︿╰)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)