软件架构
软件架构说明:
后端:
- 基础框架: SpringBoot
- 简单数据操作: Spring Data Jpa
- 复杂数据操作: MyBatis
- 安全框架: SpringSecurity
- 模板引擎: Thymeleaf
- API 文档&测试: Swagger2
- API 文档加强&美化: Swagger-Bootstrap-UI, 这个很好看, 而且功能强大,支持生成离线 MD 文档,但是版本兼容性会有问题, 我试了很多版本, 最终 1.9.3 可以正常使用
- hutool 工具箱: Java 各种工具封装, 爽的雅痞
前端:
- javaEx, 其实就是对 html,css,js 的封装, 很简单, 10 分钟就能上手。比较接近原生
修改起来比较方便, 所以就用了。想了解的, 百度 JavaEx 即可。 - jQuery , 讲真的 jQuery 用着还是很舒服, 突破各种前端框架的限制
- 这里真的要吹一波 jQuery 插件库,强大,耦合性低,加入即用, 非常适合本项目
安装教程
建议看 wiki
- 本地搭建好 java8 环境,数据库 MySQL5.5+, 克隆项目
- 导入 SQL 文件至数据库中
- 配置 maven, 等待依赖下载完成
- IDE 安装好 lombok 插件
- 启动访问 http://localhost:8080 即可
- 账号:【学生: stu/123】【教师: tea/123】【其他:other/123】【管理员:admin/123】
- swagger API 在线文档, 启动访问:http://localhost:8080/doc.html
使用说明
- 本项目适用于大学生实训, 或者想要快速搭建一个后台管理类项目的朋友,或者个人学习使用
- 不要说为啥这个项目这个东西没加, 哪个东西没加, 针对的层次不一样, 要求也不一样
- 很多我也想加, 但是复杂起来了, 不适合目标人群使用
- 为了方便大家使用, 并未对密码进行加密, 想要加密的:大家可以在插入用户的时候对密码加密, 在 loadByUsername 中去除密码加密即可
- 如果想要前后端分离的, 只需要把 Web 资源相关的去掉, 保留后端接口即可, 接口文档看 swagger 即可
package com.book.manager.controller;
import com.book.manager.entity.Book;
import com.book.manager.service.BookService;
import com.book.manager.util.R;
import com.book.manager.util.http.CodeEnum;
import com.book.manager.util.ro.PageIn;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Api(tags = "图书管理")
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@ApiOperation("图书搜索列表")
@PostMapping("/list")
public R getBookList(@RequestBody PageIn pageIn) {
if (pageIn == null) {
return R.fail(CodeEnum.PARAM_ERROR);
}
return R.success(CodeEnum.SUCCESS,bookService.getBookList(pageIn));
}
@ApiOperation("添加图书")
@PostMapping("/add")
public R addBook(@RequestBody Book book) {
return R.success(CodeEnum.SUCCESS,bookService.addBook(book));
}
@ApiOperation("编辑图书")
@PostMapping("/update")
public R modifyBook(@RequestBody Book book) {
return R.success(CodeEnum.SUCCESS,bookService.updateBook(book));
}
@ApiOperation("图书详情")
@GetMapping("/detail")
public R bookDetail(Integer id) {
return R.success(CodeEnum.SUCCESS,bookService.findBookById(id));
}
@ApiOperation("图书详情 根据ISBN获取")
@GetMapping("/detailByIsbn")
public R bookDetailByIsbn(String isbn) {
return R.success(CodeEnum.SUCCESS,bookService.findBookByIsbn(isbn));
}
@ApiOperation("删除图书")
@GetMapping("/delete")
public R delBook(Integer id) {
bookService.deleteBook(id);
return R.success(CodeEnum.SUCCESS);
}
}