[项目分析]小而美个人博客

项目分析


 

项目学习地址 : BV1nE411r7TF

 个人修改项目地址 : MyBlog

[项目简介]

 

技术

  • 后端 : Spring Boot + JPA + thymeleaf模板
  • 数据库 : MySQL
  • 前端UI : Semantic UI框架

工具及环境

  • IDEA
  • Maven3
  • JDK8

模块设计

  • 页面设计
  • 技术框架
    • 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?

 

  1. JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
  2. 查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
  3. 繁琐的代码问题 , 用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。
  4. 关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。
  5. 在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很费时费力的过程。
  6. ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。
  7. 采用JDBC编程,在很多时候存在效率低下的问题。

JPA优势

  1. 可持久化Java对象。JPA能够直接持久化复杂的Java对象,并能够使用JPQL语言进行复杂的查询。
  2. 使用简单。
  3. JPA使用注释(Annotation)定义Java对象与关系数据库之间的映射,而传统的ORM多使用xml配置文件。JPA使用起来比ORM要方便。使用JPA不用关注底层使用什么数据库。
  4. 规范标准化。JPA是JCP组织发布的,是Java官方规定的统一的API。目前已经有多种框架实现JPA标准。使用了JPA的系统可以*选择遵循JPA标准的框架,并能够*更换。
  5. 事务性、大数据量。JPA底层使用关系数据库进行存储,因此具备关系数据库的特点,例如事务性、数据完整性、并发访问、大数据量等。
  6. 与其他持久化技术相比,JPA有很大的技术优势。

JPA的缺点

  1. 因为sql语句是自动生成的可读性是比较差的
  2. 对于一些高级业务或者复杂的查询都需要自己来实现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(难受),但是逻辑简单,处了分页我都能够快速理解

 

[计划]

  1. 先学习分页插件的使用以及原理   (由于JPA自带有分页插件,SQL语句不太好扒源码,在一个换mybatis需要使用其它的插件如Pagehelper  导致我改写mybatis从几个方向改写都有一定的问题 )
  2. 改写前端页面  (有尝试,但Bootstrap或者layui成套的好看博客比较少,导致去扒别人的网站源码,发现合并源码导致的css冲突真的是一个令人头大的问题,有想法等学习vue之后再上手)
  3. 添加用户注册
  4. 添加文件上传(如头像)
  5. 添加安全控制shiro(感觉还早呢 ╯︿╰)

 

 

 

 

 

 

 

 

 

 

 

上一篇:Springboot-jpa


下一篇:spring boot:实现jpa+thymeleaf 用户管理