一、简介
ruoyi-vue-pro 是一款基于 SpringBoot2.x 全家桶实现、Vue、Element UI 的后台管理系统模板,提供模板功能和CRUD代码生成,并且支持多租户系统、多数据源系统,可浏览器缓存、工作流、十强排行榜、代码生成等常用开发功能。
在本章节中,我们将介绍该系统的基本架构和运行环境。
二、系统架构
本系统的架构基于传统的前后端分离架构模式,采用以下技术栈:
- 前端采用 Vue + Element + Axios + Webpack;
- 后端采用 SpringBoot2.x + MyBatis-Plus + Shiro + Swagger-UI + Log4j2。
三、运行环境
运行该项目需要满足以下环境:
- JDK8+
- Maven 3.0+
- MySQL 5.5+
- Node.js 10+
四、项目结构
本系统的项目结构如下:
ruoyi-vue-pro/
├── ruoyi-admin/ 后台管理模块
├── ruoyi-common/ 客户端、服务端公共模块
├── ruoyi-framework/ 框架核心模块
├── ruoyi-generator/ java代码自动生成模块
├── ruoyi-quartz/ 定时任务模块
├── ruoyi-system/ 后台管理业务模块
├── ruoyi-tools/ 系统工具模块
└── src/ Vue前端代码
五、代码示例
1. Mybatis-Plus 更改系统默认表名确定方法
在项目中使用Mybatis-Plus的时候,默认情况下表名和实体类名必须一一对应,否则-会出现"无法找到该实体"的错误。在系统多数据源的时候,这种情况更加明显。
/**
* 代码生成前缀配置,表名以sys_开头才生成代码
*/
strategy.setTablePrefix(new String[] { "sys_" });
/**
*根据数据库表获取对应实体类
*/
@Override
public String tableToJava(String tableName) {
if (tableName.startsWith("sys_")) {
return upperTableName2Camel(tableName.replaceFirst("sys_", ""));
} else if (tableName.startsWith("gen_")) {
return upperTableName2Camel(tableName.replaceFirst("gen_", "Gen"));
} else if (tableName.startsWith("qrtz_")) {
return upperTableName2Camel(tableName.replaceFirst("qrtz_", "Qrtz"));
} else {
return upperTableName2Camel(tableName);
}
}
2. 自定义异常处理
异常处理是Web应用开发中非常重要的一环,当系统出现异常时,我们需要有一个统一的异常处理机制。在本项目中,我们通过继承DefaultHandlerExceptionResolver,并重写它的resolveException()方法实现异常处理。
@RestControllerAdvice
public class GlobalExceptionHandler extends DefaultHandlerExceptionResolver {
@Autowired
private MessageSource messageSource;
/**
* 处理业务异常
*/
@ExceptionHandler(BusinessException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public R businessException(BusinessException e) {
String message = messageSource.getMessage(e.getMessage(), null, LocaleContextHolder.getLocale());
return R.error(message);
}
/**
* 处理未知异常
*/
@Override
protected ResponseEntity