基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现
博主介紹:?全網粉絲3W+,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建、畢業項目實戰、項目定制?
博主作品:《微服務實戰》專欄是本人的實戰經驗總結,《Spring家族及微服務系列》專注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源碼解讀、熱門面試題、架構設計等。除此之外還有不少文章等你來細細品味,更多驚喜等著你哦
開源項目:點擊這里克隆或者下載
🍅文末關注公眾號獲取聯系🍅精彩專欄推薦訂閱👇🏻👇🏻 不然下次找不到喲
?Java項目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》
https://blog.csdn.net/qq_57756904/category_12199600.html
???【微服務】Nacos為什么丟棄短連接(http)而選擇擁抱長連接(gRPC)
目錄
一、前言
二、系統設計
1、系統運行環境
2、系統架構設計
三、非功能性需求分析與可行性分析
四、運行截圖
1、登錄注冊界面
2、系統管理員界面
2.1、話題發布
2.2、作者管理
2.3、評論管理
2.4、圖書管理
2.5、系統管理
2)、公告通知
3、 閱讀用戶
3.1、PC端
3.2、uniapp端
五、實現代碼
1、角色控制器
2、接口
3、實現類
六、開源動向
1、首頁
2、我的
七、獲取源碼
一、前言
? ? 本系統是基于Spring1Boot+MyBatis+Vue+Uniapp的前后端完全分離的圖書閱讀管理系統。值得一提的是前端使用了目前市場上較流行的組件elementui,在本系統里面對其進行了二次封裝,使得頁面更加的簡潔與優雅,也提高了系統的可維護性。同時探究前端與后端是如何建立數據交互的,以及它為系統提供的服務和已經建好的多張表之間的關系。故課題研究的是這些技術的關聯以及如何實現本系統,同時探究系統如何在Linux系統進行Docker容器化部署。
二、系統設計
1、系統運行環境
開發系統:Windows10左右
架構模式:MVC/前后端分離
JDK版本:Java JDK1.8
開發工具:IDEA
數據庫版本: mysql5.7
數據庫可視化工具: SQL yog或Navicat for MySQL
服務器:SpringBoot自帶 apache tomcat
主要技術:Java、SpringBoot2、MyBatis、SpringSecurity、MySQL、Html、Vue、Elementui、uniapp等
?
2、系統架構設計
三、非功能性需求分析與可行性分析
2.5非功能性需求分析
非功能性需求:用戶對軟件質量屬性、運行環境、資源約束、外部接口等方面的要求或期望,包括:
2.5.1性能需求:
用戶在軟件響應速度、結果精度、運行時資源消耗量等方面的要求。
2.5.2可行性需求:
用戶在軟件失效的頻率、嚴重程度、易恢復性,以及故障可預測性等方面的要求。
2.5.3易用性需求:
用戶在界面的易用性、美觀性,以及對面向用戶的文檔和培訓資料等方面的要求。
2.5.4安全性需求:
用戶在身份證、授權控制、私密性等方面的要求。
2.5.5運行環境約束:
用戶對軟件系統運行環境的要求。
2.5.6外部接口:
用戶對待開發軟件系統與其它軟件系統或設備之間的接口要求
2.6可行性分析
可行性分析是從不同的角度,對可能影響系統的各方面因素進行分析,確認系統在實際生活上是可行的。本系統只是單純地從經濟、法律、技術、操作可行性四個方面來分析說明。
2.6.1技術可行性
技術上的可行性分析主要分析技術條件能否順利完成開發工作,軟、硬件能否滿足需要。本系統采用Vue+Elementui開發出友好美觀的人機界面,便于用戶理解、操作。數據庫管理系統采用MySQL,它能夠處理大量數據,同時保持數據的完整性、安全性和持久性。后端技術使用SpringBoot、MyBatis,這些技術在許多公司已經被商用了,因此本系統的開發平臺已成熟可行。硬件方面,在科技飛速發展的今天,硬件更新速度越來越快,容量越來越大,可靠性越來越高,價格越來越便宜,因此硬件平臺也能夠滿足本系統所需。
2.6.2經濟可行性
??項目放在阿里學生服務器或者本地虛擬機的linux環境,故可行。
2.6.3法律可行性
??可行,自己寫的項目,目的明確,沒有違法違規。
2.6.4操作可行性
??操作較為簡單,而且當下信息科技發達,界面的設計也著實考慮到用戶的體驗,系統也是為用戶而生。故操作是可行的,不存在難度大的操作。
四、運行截圖
1、登錄注冊界面
2、系統管理員界面
2.1、話題發布
2.2、作者管理
2.3、評論管理
2.4、圖書管理
2.5、系統管理
1)、角色管理
可以分配系統權限
2)、公告通知
3)、字典管理
4)、日志管理
3、 閱讀用戶
注意、注意、注意:這是點擊上面左側的logo(CeaM圖書左側)進來的,退出的話點擊創作中心
3.1、PC端
1)首頁
動態輪播圖
?可以點擊立即閱讀
可以點擊換一批
2)上面點擊立即閱讀來到這里
可以點擊加入書架、小程序閱讀,結果可以在右上角點擊“我的地盤”查看結果;還可以發表評論,評論在下方底部顯示,同時可以回復
3)我的地盤
可以查看動態、上面點擊的加入書架、以及喜歡
4)加入書架可以移除
5)喜歡
3.2、uniapp端
1)首頁
?
2)我的
可以編輯資料等等
3)社區廣場
五、實現代碼
1、角色控制器
/*** <p>* 角色表 前端控制器* </p>** @author CeaM* @since 2023-01-28*/ @RestController @AllArgsConstructor @RequestMapping("/api/roles") public class CeamSysRoleController {private final ICeamSysRoleService ceamSysRoleService;private final ICeamSysUserService ceamSysUserService;@GetMappingpublic ResponseEntity<IPage<CeaMSysRoleVO>> getRoles(PageableDTO pageable) {IPage<CeaMSysRoleVO> mapIPage = ceamSysRoleService.pageCeaMSysRoleVO(pageable);return ResponseEntity.ok(mapIPage);}@GetMapping(value = "/level")public ResponseEntity<Object> getLevel() {return new ResponseEntity<>(Dict.create().set("level", getLevels(null)), HttpStatus.OK);}@PutMapping(value = "/menu")public ResponseEntity<Object> updateMenu(@RequestBody CeaMSysRoleDTO roleDTO) {CeamSysRole role = ceamSysRoleService.getById(roleDTO.getId());getLevels(role.getLevel());ceamSysRoleService.updateMenu(roleDTO, role);return new ResponseEntity<>(HttpStatus.NO_CONTENT);}/*** 獲取用戶的角色級別* @return /*/private int getLevels(Integer level) {CeaMSysUserDTO user = ceamSysUserService.loadUserInfo(SecurityUtils.getUsername());List<RoleDTO> roleDTOS = ceamSysRoleService.listByUserId(user.getId());List<Integer> levels = roleDTOS.stream().map(RoleDTO::getLevel).collect(Collectors.toList());int min = Collections.min(levels);if (level != null) {if (level < min) {throw new ServiceException("權限不足,你的角色級別:" + min + ",低于操作的角色級別:" + level);}}return min;} }2、接口
/*** <p>* 角色表 服務類* </p>** @author CeaM* @since 2023-01-28*/ public interface ICeamSysRoleService extends IService<CeamSysRole> {IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable);/*** 獲取用戶權限信息* @param userId 用戶信息* @return 權限信息*/Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId);/**** @param userId 用戶ID* @return RoleItemVOs*/List<RoleDTO> listByUserId(Long userId);void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role); }3、實現類
/*** <p>* 角色表 服務實現類* </p>** @author CeaM* @since 2023-01-28*/ @Slf4j @Service @AllArgsConstructor public class CeamSysRoleServiceImpl extends ServiceImpl<CeamSysRoleMapper, CeamSysRole> implements ICeamSysRoleService {private ICeamSysMenuService ceamSysMenuService;private ICeamRoleMenuService ceamRoleMenuService;@Overridepublic IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable) {LambdaQueryWrapper<CeamSysRole> queryWrapper = Wrappers.<CeamSysRole>lambdaQuery().eq(CeamSysRole::getDeleted, GlobalConstants.FALSE);Page<CeamSysRole> page = new Page<>(pageable.getPage(), pageable.getSize());// 手動設置當前頁,不然分頁失效page.setCurrent((long)pageable.getPage() + GlobalConstants.ONE);Page<CeamSysRole> ceamSysRolePage = page(page, queryWrapper);IPage<CeaMSysRoleVO> ceaMSysRoleVOIPage = PageVOUtil.copyToPageVO(ceamSysRolePage, CeaMSysRoleVO.class);for (CeaMSysRoleVO role : ceaMSysRoleVOIPage.getRecords()) {List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoleId(role.getId(), GlobalConstants.ZERO);role.setMenus(menuDTOS);}return ceaMSysRoleVOIPage;}@Overridepublic Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId) {List<RoleDTO> roleItemDTOS = this.baseMapper.listByUserId(userId);if (CollectionUtils.isEmpty(roleItemDTOS)) {throw new ServiceException("沒有分配角色");}List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoles(roleItemDTOS, GlobalConstants.ZERO);// 角色Set<String> permissions = roleItemDTOS.stream().filter(role -> StringUtils.isNotBlank(role.getName())).map(RoleDTO::getName).collect(Collectors.toSet());permissions.addAll(menuDTOS.stream().filter(menu -> StringUtils.isNotBlank(menu.getPermission())).map(MenuDTO::getPermission).collect(Collectors.toSet()));return permissions.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList());}@Overridepublic List<RoleDTO> listByUserId(Long userId) {return this.baseMapper.listByUserId(userId);}@Overridepublic void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role) {if (roleDTO.getMenus().size() > 0) {List<CeamRoleMenu> rolesMenusList = roleDTO.getMenus().stream().map(i -> {CeamRoleMenu rolesMenus = new CeamRoleMenu();rolesMenus.setRoleId(roleDTO.getId());rolesMenus.setMenuId(i.getId());return rolesMenus;}).collect(Collectors.toList());ceamRoleMenuService.remove(new LambdaQueryWrapper<CeamRoleMenu>().eq(CeamRoleMenu::getRoleId, roleDTO.getId()));ceamRoleMenuService.saveBatch(rolesMenusList);}} }六、開源動向
后端、PC端目前已經開源,uniapp后期即將開源
1、首頁
2、我的
七、獲取源碼
?大家點贊、收藏、關注、評論啦?、關注下方公眾號獲取聯系方式👇🏻👇🏻
總結
以上是生活随笔為你收集整理的基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【uni-app】懂你找图--创建项目到
- 下一篇: springboot+vue在线答疑系统