当前位置:网站首页 > Java教程 > 正文

java后台模板教程



(1) 相关博文地址:

(2)代码地址:

(1)基本介绍
  使用 SpringBoot + MyBatisPlus + MySQL 搭建一个后台管理系统的模板(后台代码)。
  当然这类模板在网上有很多,可以直接下载、修改使用。
  写这个项目目的,纯属练手(有不对的地方,还望不吝指教)。

(2)软件使用
开发工具(随意选择,能提高开发效率即可):
  IntelliJ IDEA + Navicat

环境、依赖:
  JDK 1.8 开发环境
  SpringBoot 2.3 核心框架
  SpringMVC 视图框架
  MyBatisPlus 持久层框架
  swagger2 生成在线的接口文档
  JSR303 数据校验
  SLF4J、Logback 日志管理
  MySQL 8.0.18 数据库

(3)基本目录介绍

Step4:
  选择相应的 SpringBoot 版本,以及相关依赖(可以在项目中手动添加)。
如下,选择一个 web 依赖(自动集成SpringMVC 相关依赖)。

(2)代码实现
Step1:
  添加依赖信息。
  httpcore 用于状态码的获取。
  lombok 用于简化代码的编写。

启动服务并访问接口,返回结果如下:(返回指定的 JSON 格式)

(1)简介
  程序运行时可能会遇到各种错误,使用统一的异常处理规范,可以方便的排查错误。
可以参考:
  https://www.cnblogs.com/l-y-h/p/12781586.html#_label2

(2)代码实现
Step1:
  添加依赖信息。
  此处需要使用 @RestControllerAdvice、@ExceptionHandler 两个注解,需要 Spring MVC 相关依赖,若之前创建项目时,未选择 Spring Web,此处需要手动添加。

Step3:
  在 common.exception 目录下定义一个全局异常处理类 GlobalExceptionHandler,用于处理异常。
  异常一般都与日志一起操作,此处演示不使用注解 @Slf4j 时的日志处理。

启动服务并访问接口,返回结果如下:(捕获到异常信息并返回)

日志也能正常输出:

Step5:(可选操作)
  若想在返回结果中输出 堆栈 信息,可以定义如下工具类,将堆栈信息转为 String 类型,然后再添加到返回的 message 中即可。
如下,新建一个工具类,用于装换堆栈信息为 String 类型,使用 @Slf4j 注解形式操作日志。

修改 TestController.java,简单测试一下:

(1)简介
  使用日志可以方便、快速定位到错误所在处。统一日志格式可以更方便日志的查看、管理。
可以参考:
  https://www.cnblogs.com/l-y-h/p/12781586.html#_label3

(2)代码实现:
  在 resources 目录下新建一个 logback-spring.xml 文件,其会在项目启动时被加载。
Step1:
  基本代码如下:(需要适当修改)

Step2:
  按照项目需要对该文件进行修改。
一般只需要修改两处地方即可。

(1)简介
  使用 Swagger 生成一个在线的接口文档,前后端可以根据此接口文档对接口进行测试、调用。
Swagger 使用可以参考:
  https://www.cnblogs.com/l-y-h/p/12872748.html

(2)SpringBoot 整合 Swagger
Step1:
  添加依赖信息。

Step2:
  在 common.config 目录下编写一个配置类 SwaggerConfig.java,用于配置 Swagger 相关信息。
  @Configuration 注解用于标注一个配置类
  @EnableSwagger2 注解用于开启 Swagger。
  @Profile({"dev","test"}) 注解用于表示 dev、test 环境下可以使用 Swagger,prod 环境下不行。
如下:
  指定了 com.lyh.admin_template.back.controller 包下标注了 @ApiOperation 注解的接口才会生成接口文档。

Step4:
  访问项目的 swagger-ui.html 页面,即可访问到 Swagger 页面。
比如:http://localhost:8080/swagger-ui.html,
如下,三个接口,只有标注了 @ApiOperation 注解的接口才会被显示在 接口文档中。

(1)简介
  MyBatisPlus 是 MyBatis 增强版(持久层框架),其内置了一些 sql 增删改查的操作,可以免去 xml 文件的编写工作(当然复杂的 sql 逻辑还是得用 xml 编写)。
  当然还有其他一些功能,总体使用起来比 MyBatis 更加方便。

(2)SpringBoot 整合 MyBatisPlus
Step1:
  添加相关依赖信息。
  涉及数据库操作,此处使用 mysql,所以需要 mysql-connector 相关依赖。
  当然还得有 MyBatisPlus 相关操作的依赖。
    mybatis-plus-boot-starter 是最基本的依赖。
    mybatis-plus-generator、velocity-engine-core 是MyBatisPlus 代码生成器所需依赖。

Step2:
  在本地数据库新建一个 admin_template 数据库,并建立一个 back_user 表用于测试一下 MyBatisPlus 是否能使用。
back_user 建表 SQL 语句如下:

Step3:
  在配置文件中配置 数据源信息。
  根据项目自行配置 mysql 数据源信息。

(3)使用代码生成器
  使用 MyBatisPlus 代码生成器 AutoGenerator 根据 back_user 表逆向生成基本代码。
Step1:
  添加依赖。
  mybatis-plus-generator、velocity-engine-core 是MyBatisPlus 代码生成器所需依赖。

Step2:
  编写一个测试类,用于测试 代码生成器 功能。
  需要修改的地方,下面注释中已标明。

执行后,根据 back_user 表结构生成 controller、entity、mapper、service 等相关代码。

(4)使用自动填充数据
  添加数据时,按照某种规则自动给字段添加相关数据。
比如:
  back_user 中 create_time、update_time、delete_flag、version 等字段,在插入、修改时都是按照某种数据填充规则进行数据填充,这些数据就可以使用 MyBatisPlus 的自动填充数据功能来完成。
可以参考:
 https://www.cnblogs.com/l-y-h/p/12859477.html#_label1_3

Step1:
  在 handler 目录下新建一个自动填充处理类 MyMetaObjectHandler.java,实现 MetaObjectHandler 接口,并重写方法以实现自动填充功能。
  @Component 表示将此类交给 Spring 去管理。

Step4:
  使用 Swagger,并输入以下数据进行测试:
  由于 id 采用 IdType.ASSIGN_ID 类型,其也是自动生成的。
  所以只需要添加 mobile、name、password 三个值即可。
  且 name 在 back_user 表中是唯一的,所以重复添加时会添加失败。

(5)实现逻辑删除
  删除数据时,有物理删除(直接从数据表中删除)、逻辑删除(修改表中某字段,该字段表示该行数据已被删除,但仍留在数据表中,查询数据时此数据不可见)。
可以参考:
  https://www.cnblogs.com/l-y-h/p/12859477.html#_label1_4

Step1:
  在实体类上使用 @TableLogic 注解标注逻辑删除字段,并指定字段变化规则。
  指定 back_user 表中的 delete_flag 字段,0 表示未删除, 1 表示删除。

Step3:
  测试逻辑删除。
  逻辑删除后,数据仍存于表中,但查询不可见。

(6)分页、乐观锁实现
  分页、乐观锁实现需要借助插件来完成了,需要进行额外的配置。
可以参考:
  https://www.cnblogs.com/l-y-h/p/12859477.html#_label1_5
  https://www.cnblogs.com/l-y-h/p/12859477.html#_label1_6
此处直接写实现逻辑,不详细解释。

Step1:
  在 common.config 目录下编写一个配置类 MyBatisPlusConfig.java。
  此时可以将 启动类上的 @MapperScan 移到此处。

Step2:
  对于实现乐观锁,只需在 实体类字段上标注 @Version 注解即可。
如下,给 User.java 的 version 字段添加 @Version 注解。

Step3:
  对于实现分页,首先声明一个 Page 对象,并指定查询的当前页以及每页的大小,然后直接调用 MyBatisPlus 提供的 page 方法即可,page 方法中可以添加过滤条件。
如下,编写 TestController.java 用于测试

(1)简介
  使用 JSR303,采用注解的方式,对传入接口的数据进行数据校验,减少额外的校验代码。
可以参考:
  https://www.cnblogs.com/l-y-h/p/12797809.html

(2)代码实现:
Step1:
  添加相关依赖信息。

Step4:
  在实体类上添加相关 JSR 303 注解即可使用。
如下,在 name、mobile、password 字段上添加 注解并指定 分组校验规则。

Step5:
  使用 Swagger 进行测试。
  由于添加、修改在此处指定的规则均相同,当数据为空或者手机号不合法时,会校验失败,不会进入接口。数据校验通过后,才会执行接口中逻辑。

(2)实现
  此处采用 spring-boot-devtools 提供的开发者工具实现热部署。
  其基于类加载机制来实现热部署,即修改完代码后,需要重新编译当前代码才能触发热部署。IDEA 中默认关闭自动编译,需要按下面步骤将其开启。


Step1:
  添加依赖信息。

Step2:
  在 idea 中开启项目自动编译。
  打开设置窗口,找到 Build, Execution, Deployment -> Compiler
  然后勾选 Build project automatically 。

Step3:
  在 idea 中开启项目运行时自动 make。
  按快捷键 ctrl + alt + shift + /,可以弹出一个框,选择 Registry.

进入 Registry 窗口后,找到 compiler.automake.allow.when.app.running 并勾选。

Step5:
  修改完后,记得重启项目。然后修改代码,查看是否生效(可能需要等待几秒)。
  快捷键 Ctrl + Shift + F9 可以重新编译项目(有时候热部署可能会删除一些文件,若显示异常,可以手动编译一下)。

(2)实现步骤:
  SpringBoot 内置了国际化处理,可以直接使用,当然也可以自定义使用。
如下为自定义使用步骤。
Step1:在 resources 目录下定义好相关的资源文件,并填入相应的中英文数据信息。
Step2:在项目配置文件中 定义 spring.messages.basename,用于指定资源文件。
Step3:添加一个 国际化的配置文件,用于拦截并处理转换语言。
Step4:添加一个工具类,用于获取国际化的数据。

(3)代码实现:
Step1:
  在 resources/static 目录下,新建一个 i18n 目录,用于存放国际化资源文件。
  在该目录下新建两个文件:messages_zh_CN.properties、messages_en_US.properties。
  SpringBoot 中配置类 MessageSourceAutoConfiguration.java 源码中默认配置文件前缀为 messages。可以在 SpringBoot 的配置文件中指定 spring.messages.basename,从而自定义文件路径。

定义国际化资源文件内容:

  有时候会出现中文乱码情况,请自行检查国际化资源文件是否为 UTF-8 编码格式的。

Step3:
  新建一个国际化配置文件 LocaleConfig.java,用于处理 国际化相关逻辑。
其中:
  LocaleResolver 用于解析当前语言环境。
  LocaleChangeInterceptor 用于获取请求中的语言环境。
  ResourceBundleMessageSource 用于加载国际资源文件位置。

如下图所示,
  当 cookie 中不存在 language 时,默认返回中文数据。
  当 cookie 中存在 language = zh_CH 时,返回中文数据。
  当 cookie 中存在 language = en_US 时,返回英文数据。

(4)整合 JSR303 进行国际化处理

对于 JSR303 国际化问题,只需要让其也加载 国际化资源文件即可。

Step1:
  可以手动配置 Validator 实例对象。
  引入 import javax.validation.Validator; 不要导错包了。

Step4:
  简单测试一下。
  使用之前写好的 “测试 JSR 303 添加时的校验规则” 接口用于测试。

版权声明


相关文章:

  • java新手开发教程2025-03-16 21:42:02
  • java教程李兴华2025-03-16 21:42:02
  • riak教程 java2025-03-16 21:42:02
  • 正版java教程2025-03-16 21:42:02
  • java**教程2025-03-16 21:42:02
  • java双师教程视频2025-03-16 21:42:02
  • java入门教程pdf2025-03-16 21:42:02
  • java教程472025-03-16 21:42:02
  • 301集java全套教程视频2025-03-16 21:42:02
  • java游戏外挂教程2025-03-16 21:42:02