基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现
博主介紹:?全網(wǎng)粉絲3W+,全棧開發(fā)工程師,從事多年軟件開發(fā),在大廠呆過。持有軟件中級、六級等證書。可提供微服務(wù)項目搭建、畢業(yè)項目實戰(zhàn)、項目定制?
博主作品:《微服務(wù)實戰(zhàn)》專欄是本人的實戰(zhàn)經(jīng)驗總結(jié),《Spring家族及微服務(wù)系列》專注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源碼解讀、熱門面試題、架構(gòu)設(shè)計等。除此之外還有不少文章等你來細(xì)細(xì)品味,更多驚喜等著你哦
開源項目:點擊這里克隆或者下載
🍅文末關(guān)注公眾號獲取聯(lián)系🍅精彩專欄推薦訂閱👇🏻👇🏻 不然下次找不到喲
?Java項目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》
https://blog.csdn.net/qq_57756904/category_12199600.html
???【微服務(wù)】Nacos為什么丟棄短連接(http)而選擇擁抱長連接(gRPC)
目錄
一、前言
二、系統(tǒng)設(shè)計
1、系統(tǒng)運行環(huán)境
2、系統(tǒng)架構(gòu)設(shè)計
三、非功能性需求分析與可行性分析
四、運行截圖
1、登錄注冊界面
2、系統(tǒng)管理員界面
2.1、話題發(fā)布
2.2、作者管理
2.3、評論管理
2.4、圖書管理
2.5、系統(tǒng)管理
2)、公告通知
3、 閱讀用戶
3.1、PC端
3.2、uniapp端
五、實現(xiàn)代碼
1、角色控制器
2、接口
3、實現(xiàn)類
六、開源動向
1、首頁
2、我的
七、獲取源碼
一、前言
? ? 本系統(tǒng)是基于Spring1Boot+MyBatis+Vue+Uniapp的前后端完全分離的圖書閱讀管理系統(tǒng)。值得一提的是前端使用了目前市場上較流行的組件elementui,在本系統(tǒng)里面對其進行了二次封裝,使得頁面更加的簡潔與優(yōu)雅,也提高了系統(tǒng)的可維護性。同時探究前端與后端是如何建立數(shù)據(jù)交互的,以及它為系統(tǒng)提供的服務(wù)和已經(jīng)建好的多張表之間的關(guān)系。故課題研究的是這些技術(shù)的關(guān)聯(lián)以及如何實現(xiàn)本系統(tǒng),同時探究系統(tǒng)如何在Linux系統(tǒng)進行Docker容器化部署。
二、系統(tǒng)設(shè)計
1、系統(tǒng)運行環(huán)境
開發(fā)系統(tǒng):Windows10左右
架構(gòu)模式:MVC/前后端分離
JDK版本:Java JDK1.8
開發(fā)工具:IDEA
數(shù)據(jù)庫版本: mysql5.7
數(shù)據(jù)庫可視化工具: SQL yog或Navicat for MySQL
服務(wù)器:SpringBoot自帶 apache tomcat
主要技術(shù):Java、SpringBoot2、MyBatis、SpringSecurity、MySQL、Html、Vue、Elementui、uniapp等
?
2、系統(tǒng)架構(gòu)設(shè)計
三、非功能性需求分析與可行性分析
2.5非功能性需求分析
非功能性需求:用戶對軟件質(zhì)量屬性、運行環(huán)境、資源約束、外部接口等方面的要求或期望,包括:
2.5.1性能需求:
用戶在軟件響應(yīng)速度、結(jié)果精度、運行時資源消耗量等方面的要求。
2.5.2可行性需求:
用戶在軟件失效的頻率、嚴(yán)重程度、易恢復(fù)性,以及故障可預(yù)測性等方面的要求。
2.5.3易用性需求:
用戶在界面的易用性、美觀性,以及對面向用戶的文檔和培訓(xùn)資料等方面的要求。
2.5.4安全性需求:
用戶在身份證、授權(quán)控制、私密性等方面的要求。
2.5.5運行環(huán)境約束:
用戶對軟件系統(tǒng)運行環(huán)境的要求。
2.5.6外部接口:
用戶對待開發(fā)軟件系統(tǒng)與其它軟件系統(tǒng)或設(shè)備之間的接口要求
2.6可行性分析
可行性分析是從不同的角度,對可能影響系統(tǒng)的各方面因素進行分析,確認(rèn)系統(tǒng)在實際生活上是可行的。本系統(tǒng)只是單純地從經(jīng)濟、法律、技術(shù)、操作可行性四個方面來分析說明。
2.6.1技術(shù)可行性
技術(shù)上的可行性分析主要分析技術(shù)條件能否順利完成開發(fā)工作,軟、硬件能否滿足需要。本系統(tǒng)采用Vue+Elementui開發(fā)出友好美觀的人機界面,便于用戶理解、操作。數(shù)據(jù)庫管理系統(tǒng)采用MySQL,它能夠處理大量數(shù)據(jù),同時保持?jǐn)?shù)據(jù)的完整性、安全性和持久性。后端技術(shù)使用SpringBoot、MyBatis,這些技術(shù)在許多公司已經(jīng)被商用了,因此本系統(tǒng)的開發(fā)平臺已成熟可行。硬件方面,在科技飛速發(fā)展的今天,硬件更新速度越來越快,容量越來越大,可靠性越來越高,價格越來越便宜,因此硬件平臺也能夠滿足本系統(tǒng)所需。
2.6.2經(jīng)濟可行性
??項目放在阿里學(xué)生服務(wù)器或者本地虛擬機的linux環(huán)境,故可行。
2.6.3法律可行性
??可行,自己寫的項目,目的明確,沒有違法違規(guī)。
2.6.4操作可行性
??操作較為簡單,而且當(dāng)下信息科技發(fā)達(dá),界面的設(shè)計也著實考慮到用戶的體驗,系統(tǒng)也是為用戶而生。故操作是可行的,不存在難度大的操作。
四、運行截圖
1、登錄注冊界面
2、系統(tǒng)管理員界面
2.1、話題發(fā)布
2.2、作者管理
2.3、評論管理
2.4、圖書管理
2.5、系統(tǒng)管理
1)、角色管理
可以分配系統(tǒng)權(quán)限
2)、公告通知
3)、字典管理
4)、日志管理
3、 閱讀用戶
注意、注意、注意:這是點擊上面左側(cè)的logo(CeaM圖書左側(cè))進來的,退出的話點擊創(chuàng)作中心
3.1、PC端
1)首頁
動態(tài)輪播圖
?可以點擊立即閱讀
可以點擊換一批
2)上面點擊立即閱讀來到這里
可以點擊加入書架、小程序閱讀,結(jié)果可以在右上角點擊“我的地盤”查看結(jié)果;還可以發(fā)表評論,評論在下方底部顯示,同時可以回復(fù)
3)我的地盤
可以查看動態(tài)、上面點擊的加入書架、以及喜歡
4)加入書架可以移除
5)喜歡
3.2、uniapp端
1)首頁
?
2)我的
可以編輯資料等等
3)社區(qū)廣場
五、實現(xiàn)代碼
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("權(quán)限不足,你的角色級別:" + min + ",低于操作的角色級別:" + level);}}return min;} }2、接口
/*** <p>* 角色表 服務(wù)類* </p>** @author CeaM* @since 2023-01-28*/ public interface ICeamSysRoleService extends IService<CeamSysRole> {IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable);/*** 獲取用戶權(quán)限信息* @param userId 用戶信息* @return 權(quán)限信息*/Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId);/**** @param userId 用戶ID* @return RoleItemVOs*/List<RoleDTO> listByUserId(Long userId);void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role); }3、實現(xiàn)類
/*** <p>* 角色表 服務(wù)實現(xiàn)類* </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());// 手動設(shè)置當(dāng)前頁,不然分頁失效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端目前已經(jīng)開源,uniapp后期即將開源
1、首頁
2、我的
七、獲取源碼
?大家點贊、收藏、關(guān)注、評論啦?、關(guān)注下方公眾號獲取聯(lián)系方式👇🏻👇🏻
總結(jié)
以上是生活随笔為你收集整理的基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【uni-app】懂你找图--创建项目到
- 下一篇: html5倒计时秒杀怎么做,vue 设