小言_互联网的博客

Springboot+shiro+mybatis-plus+vue前后端分离项目架构设计

528人阅读  评论(0)

目录


前言

一、后端项目

1、系统架构设计

2、技术细节

1)、构建模块分层

2)、模块之间引用

3)、mybatis-plus配置和引入

4)、mybatis-plus分页插件

5)、代码生成器,代码里有注释

6)、shiro框架引入

二、前端项目

1、系统架构设计

2、技术细节


前言

根据公司要求,搭建个前后端分离的权限系统,根据目前技术技术水平,采用以下技术栈开发,以此写一份博客记录下构架的系统框架,同时希望能帮助因搭建系统架构不怎么会的小伙伴们,废话不多说,直接列出技术栈:

前端项目: Vue2.x+element全家桶+webpack+node+vue-admin ,开发工具:HBuilderx                      

                                                                   

 

后端项目 :Springboot2.x+shiro+mybatis-plus+mysql, 开发工具:IDEA

一、后端项目

1、系统架构设计

采用主流分层多模块开发,如下图所示

2、技术细节

1)、构建模块分层

App(app请求接口全部在这里),Web(web请求接口全部在这里)、Dao(数据层)、Model(抽象数据层)、Service(业务层)、Common(所有通用工具在这里,任何模块接口访问)

2)、模块之间引用

如下图所示:

3)、mybatis-plus配置和引入

Model模块引入maven,然后再web模块resources资源文件下的application.yml文件


  
  1. spring:
  2. # 环境 dev:开发环境|test:测试环境|prod:生产环境
  3. profiles:
  4. active: dev #激活的配置文件
  5. mybatis-plus:
  6. global-config:
  7. db-config:
  8. id-type: auto
  9. field-strategy: not_empty
  10. table-underline: true
  11. db-type: mysql
  12. logic-delete-value: 1 # 逻辑已删除值(默认为 1)
  13. logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  14. mapper-locations: classpath*:mapper/*Mapper.xml
  15. #实体扫描,多个package用逗号或者分号分隔
  16. typeAliasesPackage: com.xxhj.dao
  17. server:
  18. port: 8798

然后在生产环境和开发环境配置如下


  
  1. spring:
  2. datasource:
  3. url: jdbc:mysql://103.205.39.182:3306/xxhjj_new?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
  4. username: root
  5. password: xiaoxi()2109

Model模块pom文件配置如下


  
  1. <dependency>
  2. <groupId>com.baomidou </groupId>
  3. <artifactId>mybatis-plus-boot-starter </artifactId>
  4. <version>3.0.7.1 </version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.baomidou </groupId>
  8. <artifactId>mybatis-plus-generator </artifactId>
  9. <version>3.0.7 </version>
  10. </dependency>
  11. <dependency>
  12. <groupId>mysql </groupId>
  13. <artifactId>mysql-connector-java </artifactId>
  14. <version>8.0.11 </version>
  15. </dependency>
  16. <!-- beetl 模板引擎 -->
  17. <dependency>
  18. <groupId>com.ibeetl </groupId>
  19. <artifactId>beetl </artifactId>
  20. <version>2.9.8 </version>
  21. </dependency>

4)、mybatis-plus分页插件


  
  1. @EnableTransactionManagement
  2. @Configuration
  3. @MapperScan("com.xxhj.dao")
  4. public class MybatisPlusConfig {
  5. private final static Logger logger = LoggerFactory.getLogger(MybatisPlusConfig.class);
  6. /**
  7. * @description: 配置分页插件
  8. *
  9. * @author: gradual
  10. * @date: 2019/1/15 10:17
  11. * @param: []
  12. * @return: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
  13. */
  14. @Bean
  15. public PaginationInterceptor paginationInterceptor() {
  16. logger.debug("注册分页插件");
  17. return new PaginationInterceptor();
  18. }
  19. /**
  20. * @description: SQL执行效率插件
  21. *
  22. * @author: gradual
  23. * @date: 20-12-229 下午8:59
  24. * @param: []
  25. * @return: com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor
  26. */
  27. @Bean
  28. @Profile({"test"})// 设置 dev test 环境开启
  29. public PerformanceInterceptor performanceInterceptor() {
  30. return new PerformanceInterceptor();
  31. }
  32. /**
  33. * 逻辑删除用,3.1.1之后的版本可不需要配置该bean,但项目这里用的是3.1.0的
  34. *
  35. * @author Guo Cheng
  36. *
  37. * @return com.baomidou.mybatisplus.core.injector.ISqlInjector
  38. */
  39. @Bean
  40. public ISqlInjector sqlInjector() {
  41. return new LogicSqlInjector();
  42. }
  43. }

5)、代码生成器,代码里有注释


  
  1. /**
  2. * MyBatis-plus 代码生成器
  3. */
  4. @Configuration
  5. public class CodeGenerator {
  6. public static boolean isTable = false;//true指定表名,false查询所有表
  7. // 数据库连接配置
  8. private static final String DB_URL = "jdbc:mysql://103.205.39.182:3306/xxhjj_new";
  9. private static final String DB_USERNAME = "root";
  10. private static final String DB_PASSWORD = "xiaoxi()2109";
  11. private static final String PACKAGE_NAME = "com.xxhj.dao";
  12. public static void main(String[] args) {
  13. System.out.println(System.getProperty("user.dir"));
  14. generateByTables(false, PACKAGE_NAME);
  15. }
  16. public static void generateByTables(boolean serviceNameStartWithI, String packageName) {
  17. AutoGenerator mpg = new AutoGenerator(); // 代码生成器
  18. // 全局配置
  19. GlobalConfig gc = new GlobalConfig();
  20. String projectPath = System.getProperty("user.dir");
  21. gc.setOutputDir(projectPath + "/Dao/src/main/java");
  22. //gc.setOutputDir(OUTPUT_DIR); // 输出位置
  23. gc.setFileOverride(false); // 覆盖文件
  24. gc.setAuthor("");
  25. gc.setOpen(true);
  26. // service 命名方式
  27. gc.setServiceName("%sService");
  28. // service impl 命名方式
  29. gc.setServiceImplName("%sServiceImpl");
  30. // 自定义文件命名,注意 %s 会自动填充表实体属性!
  31. gc.setMapperName("%sMapper");
  32. gc.setXmlName("%sMapper");
  33. gc.setFileOverride(true);
  34. gc.setActiveRecord(true);
  35. //不覆盖之前的代码
  36. gc.setFileOverride(false);
  37. // XML 二级缓存
  38. gc.setEnableCache(false);
  39. // XML ResultMap
  40. gc.setBaseResultMap(true);
  41. // XML columList
  42. gc.setBaseColumnList(false);
  43. mpg.setGlobalConfig(gc);
  44. // 数据源配置
  45. DataSourceConfig dsc = new DataSourceConfig();
  46. dsc.setUrl(DB_URL);
  47. dsc.setDriverName("com.mysql.cj.jdbc.Driver");
  48. dsc.setUsername(DB_USERNAME);
  49. dsc.setPassword(DB_PASSWORD);
  50. mpg.setDataSource(dsc);
  51. // 包配置
  52. PackageConfig pc = new PackageConfig();
  53. pc.setParent(packageName);
  54. pc.setMapper("mapper");
  55. pc.setXml("mapper/xml/");
  56. pc.setController("controller");
  57. pc.setEntity("model");
  58. mpg.setPackageInfo(pc);
  59. // 策略配置
  60. StrategyConfig strategy = new StrategyConfig();
  61. strategy.setCapitalMode(true); // 大写命名
  62. strategy.setEntityLombokModel(false); // lombok模型
  63. strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 表名映射策略
  64. strategy.setNaming(NamingStrategy.underline_to_camel); // 字段映射策略
  65. //strategy.setTablePrefix(TB_PREFIX); // 表前缀
  66. if (isTable)
  67. strategy.setInclude(scanner("请输入表名,多个用英文逗号分割").split(","));
  68. mpg.setStrategy(strategy);
  69. // 模板引擎
  70. mpg.setTemplateEngine(new BeetlTemplateEngine());
  71. try {
  72. mpg.execute();
  73. } catch (Exception e) {
  74. }
  75. }
  76. public static String scanner(String tip) {
  77. Scanner scanner = new Scanner(System.in);
  78. StringBuilder help = new StringBuilder();
  79. help.append("请输入" + tip + ":");
  80. System.out.println(help.toString());
  81. if (scanner.hasNext()) {
  82. String ipt = scanner.next();
  83. if (StringUtils.isNotEmpty(ipt)) {
  84. scanner.close();
  85. return ipt;
  86. }
  87. }
  88. throw new MybatisPlusException("请输入正确的" + tip + "!");
  89. }
  90. }

6)、shiro框架引入

在Common模块,引入shiro,如下图所示


  
  1. <dependency>
  2. <groupId>org.apache.shiro </groupId>
  3. <artifactId>shiro-spring </artifactId>
  4. <version>1.5.3 </version>
  5. </dependency>

在这里面,Web模块配置shiro,主要用到三个类,

AjaxPermissionsAuthorizationFilter(过滤器)、ShiroConfiguration(配置)、UserRealm(权限验证),在这里面建议小伙伴们先了解下2篇文章:(shiro注解权限控制、UserRealm类重写isPermitted)

二、前端项目

1、系统架构设计

安装vue-admin框架,element-ui,如下图所示

2、技术细节

时间有限,后续再更新(2021-1-10会把前端更新出来)


转载:https://blog.csdn.net/guochengabcd/article/details/111901770
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场