一、项目简介
上一篇文章手撸的一个快递查询系统,竟然阅读量过1.8w分享了我手撸自助快递单的项目。这周我对这个快递查询想做一下优化。开发一个后台内容管理系统,将快递信息在后台进行统一管理。搜寻了2个小时找到一款比较契合的瀑布内容管理系统项目pb-cms
。这个项目适合搭建博客、企业网站,后台是对内容管理。关键一点作者说项目一直在更新。那就开始本地搭建。
二、开发环境搭建
2.1技术栈
- SpringBoot: 一款微服务框架,用来简化spring应用的初始搭建以及开发过程。
- Apache Shiro: 一个功能强大且易于使用的Java安全框架,进行身份验证,授权,加密和会话管理
- Mybatis Plus: 一个MyBatis 的增强工具,在MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
- Thymeleaf: 一个XML / XHTML / HTML5模板引擎,能够应用于转换模板文件,以显示您的应用程序产生的数据和文本。
2.2部署
下载项目
1 | 复制代码git clone https://gitee.com/LinZhaoguan/pb-cms.git |
修改配置文件
配置文件在项目根目录 resources
下,主要配置文件如下:
1 | 复制代码application-dev.yml #dev(开发版)配置文件 |
这里修改一下application-dev.yml
,内容如下:
1 | 复制代码spring: |
这里注意修改一下mysql
数据库url
(链接)、username
(用户名)、password
(和密码)。修改一下redis
的host
(服务器地址)、port
(端口)、password
(密码),如果相同就不需要修改了。
导入数据库脚本
使用数据库可视化工具Navicat
工具,先创建数据库pb-cms-base
,如下图:
然后导入数据库脚本,数据库脚本文件在docs\db\pb_cms_base.sql
,数据导入如下图:
运行项目
打开com.puboot.SpringbootApplication
,运行main
方法即可:
开发环境都是用 Debug
模式启动的。当然如果你的项目已经开发完成,想部署让他人使用,可以将项目打包成jar
包来独立运行。
1 | 复制代码java -jar pb-cms.jar #本地jar包运行 |
项目运行前端运行效果:
项目运行后端运行效果:
注: 我的idea
的主题是Material Theme UI
。
三、导入 excel 功能
pom.xml配置
这里引入了hutools
工具,因为它封装了很多工具类,直接使用就可以了。项目pom.xml
添加如下依赖:
1 | 复制代码<!-- hutools--> |
工具类ExcelUtils
创建工具类,代码如下
1 | 复制代码/** |
service调用
service
层就比较简单了,获取上传的multipartFile
文件对象,将输入流传给ExcelUtils.getKuaiDiList
,就可以返回对象的集合kuaiDiList
,代码如下:
1 | 复制代码 @Override |
四、FAQ
3.1 项目集成Mybatis
是否可以不指定 type-aliases-package
属性?
答案是肯定的。为什么会单独说这个问题呢?因为我发现项目报配置文件配置文件中配置了下面内容:
1 | 复制代码mybatis-plus: |
com.puboot.model
包路径项目是没有的,难道是type-aliases-package
支持模糊匹配?一直没想过作者写错的问题。最后本地测试,并查了Mybitas Plus
,最终的解释是这样的:
typeAliasesPackage:MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名。
看了部分的源码也发现一个小知识点:type-aliases-package
是支持多个包的别名定义的。
1 | 复制代码 /** |
3.2 @RestController 和@Controller的区别?
因为本项目集成了spring-boot-starter-thymeleaf
,可以通过thymeleaf
开发我们的前端页面。学过Struts2
的同步应该知道是怎么开发Web
项目的。前端请求进入到后台控制器的业务处理方法,处理方法绑定数据到上下文,然后让方法返回一个字符串,字符串会匹配到返回前端的生成好的页面。但是有时又需要方法直接返回响应数据的json
数据。所以两者的区别显而易见。
@RestController: 这个注解相当于 @Controller + @ResponseBody。
3.3 controller 如何注入service
?
我们常用的方式可能是这样,使用@Autowired
注入我们要到的service
,代码如下:
1 | 复制代码@RequestMapping("kuaidi") |
在此项目中我发现了一种写法,代码如下:
1 | 复制代码@Controller |
这种方式其实就是构造方法注入,@AllArgsConstructor
是lombok
插件的一个注解,插件会自动生成全参数的构造方法。
五、最后
开源项目让我们很容易就可以获取并学别人的源码。我自己也在优化自助快递
查询的功能。不为别的,只为时间不浪费;每完成一个功能都有一定的成就感,让我乐在其中!
参考文章
- Mybatis3.2不支持Ant通配符: juejin.cn/post/684490…
不安分的猿人
孜孜不断的技术分享!
本文转载自: 掘金