国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  • Java工程師的進(jìn)階之路
  • 資料地址


一、項(xiàng)目展示

1、登錄及角色控制
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

2、業(yè)務(wù)模塊展示
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


二、智慧校園系統(tǒng)簡(jiǎn)介

2.1、項(xiàng)目簡(jiǎn)介

智慧校園管理系統(tǒng):主要是以年級(jí)、班級(jí)為單位,進(jìn)行老師和學(xué)生信息記錄和統(tǒng)計(jì)功能。項(xiàng)目采用前后端分離架構(gòu)思想,前端采用HTML+CSS+VUE來(lái)實(shí)現(xiàn)頁(yè)面效果展示,后端采用SpringBoot+MybatisPlus框架實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)等服務(wù)。存儲(chǔ)層使用高性能的MySQL,服務(wù)器使用SpringBoot內(nèi)置的Tomcat9.x,項(xiàng)目構(gòu)建工具使用Maven來(lái)管理jar包和項(xiàng)目構(gòu)建。


2.2、項(xiàng)目模塊

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


2.3、技術(shù)棧

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

VUE

是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。與其它大型框架不同的是,Vue 被設(shè)計(jì)為可以自底向上逐層應(yīng)用。Vue 的核心庫(kù)只關(guān)注視圖層,不僅易于上手,還便于與第三方庫(kù)或既有項(xiàng)目整合。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫(kù)結(jié)合使用時(shí),Vue 也完全能夠?yàn)閺?fù)雜的單頁(yè)應(yīng)用提供驅(qū)動(dòng)。 前后端分離是目前一種非常流行的開發(fā)模式,它使項(xiàng)目的分工更加明確:后端:負(fù)責(zé)處理、存儲(chǔ)數(shù)據(jù). 前端:負(fù)責(zé)顯示數(shù)據(jù) 前端和后端開發(fā)人員通過(guò) 接口 進(jìn)行數(shù)據(jù)的交換。

Spring

Spring就像是整個(gè)項(xiàng)目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數(shù)去調(diào)用實(shí)體類的構(gòu)造方法來(lái)實(shí)例化對(duì)象。也可以稱之為項(xiàng)目中的粘合劑。
Spring的核心思想是IoC(控制反轉(zhuǎn)),即不再需要程序員去顯式地new一個(gè)對(duì)象,而是讓Spring框架幫你來(lái)完成這一切。

SpringMVC

SpringMVC在項(xiàng)目中攔截用戶請(qǐng)求,它的核心Servlet即DispatcherServlet承擔(dān)中介或是前臺(tái)這樣的職責(zé),將用戶請(qǐng)求通過(guò)HandlerMapping去匹配Controller,Controller就是具體對(duì)應(yīng)請(qǐng)求所執(zhí)行的操作。SpringMVC相當(dāng)于SSH框架中struts。

mybatis-plus

mybatis是對(duì)jdbc的封裝,它讓數(shù)據(jù)庫(kù)底層操作變的透明。mybatis的操作都是圍繞一個(gè)sqlSessionFactory實(shí)例展開的。mybatis通過(guò)配置文件關(guān)聯(lián)到各實(shí)體類的Mapper文件,Mapper文件中配置了每個(gè)類對(duì)數(shù)據(jù)庫(kù)所需進(jìn)行的sql語(yǔ)句映射。在每次與數(shù)據(jù)庫(kù)交互時(shí),通過(guò)sqlSessionFactory拿到一個(gè)sqlSession,再執(zhí)行sql命令。MyBatis-plus就是在MyBatis的基礎(chǔ)上,為Mapper接口,Service層提供一些比較全面的CURD的業(yè)務(wù)邏輯功能,使程序員可以減少在Mapper和Service層的代碼編寫

MVC項(xiàng)目架構(gòu)

頁(yè)面發(fā)送請(qǐng)求給控制器,控制器調(diào)用業(yè)務(wù)層處理邏輯,邏輯層向持久層發(fā)送請(qǐng)求,持久層與數(shù)據(jù)庫(kù)交互,后將結(jié)果返回給業(yè)務(wù)層,業(yè)務(wù)層將處理邏輯發(fā)送給控制器,控制器再調(diào)用視圖展現(xiàn)數(shù)據(jù)。


2.4、環(huán)境準(zhǔn)備

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


三、項(xiàng)目搭建

3.1、搭建工程

1、新建工程 - zhxy - 包名:com.laptoy.zhxy - Group:com.laptoy
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
2、安裝插件

MybatisX、Lombok

3、開啟注解功能
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
4、指定Maven配置
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
5、指定字符編碼
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

6、POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.laptoy</groupId>
    <artifactId>zhxy</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zhxy</name>
    <description>zhxy</description>
    
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--單元測(cè)試啟動(dòng)器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- thymeleaf支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!--  mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>

        <!-- 簡(jiǎn)化POJO實(shí)體類開發(fā) -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!--swagger ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!--swagger2  增強(qiáng)版接口文檔-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>


        <!--開發(fā)者工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.29</version>
        </dependency>

        <!-- JWT生成Token-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.2、項(xiàng)目結(jié)構(gòu)

1、目錄結(jié)構(gòu)

java目錄:

  1. config : 項(xiàng)目的配置類
  2. controller: 控制層
  3. mapper : 持久層接口
  4. pojo : 實(shí)體類
  5. service: 服務(wù)層
  6. util: 工具類包
  7. ZhxyApplication : 啟動(dòng)類

resources目錄:創(chuàng)建多級(jí)目錄以 / 連接而不是 .

  1. mapper :持久層映射文件
  2. public/upload:文件上傳目錄
  3. static: 靜態(tài)資源目錄
  4. application.yml :SpringBoot核心配置文件

效果展示:
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


2、新建數(shù)據(jù)庫(kù) - 執(zhí)行資料的SQL文件(資料在最上面)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


3、application.yml

server:
  port: 9001

spring:
  # 解決SpringBoot2.6.0與swagger沖突問(wèn)題【原因是在springboot2.6.0中將SpringMVC 默認(rèn)路徑匹配策略從AntPathMatcher 更改為PathPatternParser,導(dǎo)致出錯(cuò),解決辦法是切換回原先的AntPathMatcher】
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

  datasource:
    # 配置數(shù)據(jù)源類型
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/zhxy_db?characterEncoding=utf-8&serverTimezone=GMT%2B8&userSSL=false
    username: root
    password: root

    # Mybatis-plus內(nèi)置連接池
    hikari:
      connection-test-query: SELECT 1
      connection-timeout: 60000
      idle-timeout: 500000
      max-lifetime: 540000
      maximum-pool-size: 12
      minimum-idle: 10
      pool-name: GuliHikariPool
  thymeleaf:
    # 模板的模式,支持 HTML, XML TEXT JAVASCRIPT
    mode: HTML5
    # 編碼 可不用配置
    encoding: UTF-8
    # 開發(fā)配置為false,避免修改模板還要重啟服務(wù)器
    cache: false
    # 配置模板路徑,默認(rèn)是templates,可以不用配置
    prefix: classpath:/static/
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  servlet:
    # 設(shè)置文件上傳上限
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
mybatis-plus:
  configuration:
    #添加日志支持
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:/mapper/**/*.xml

4、前端頁(yè)面放入static目錄(資料在最上面)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


5、測(cè)試

運(yùn)行主啟動(dòng)類訪問(wèn) localhost:9001

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


3.3、配置類

1、分頁(yè)插件的配置類

package com.laptoy.zhxy.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.laptoy.zhxy.mapper")
public class MpConfig {

    /**
     * 分頁(yè)插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // paginationInterceptor.setLimit(你的最大單頁(yè)限制數(shù)量,默認(rèn) 500 條,小于 0 如 -1 不受限制);
        return paginationInterceptor;
    }
}

2、Swagger2的配置類

package com.laptoy.zhxy.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

/**
 * Swagger2配置信息
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {

    @Bean
    public Docket webApiConfig() {
        //添加head參數(shù)start
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("userId")
                .description("用戶ID")
                .defaultValue("1")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tokenPar.build());

        ParameterBuilder tmpPar = new ParameterBuilder();
        tmpPar.name("userTempId")
                .description("臨時(shí)用戶ID")
                .defaultValue("1")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tmpPar.build());
        //添加head參數(shù)end

        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                //可以測(cè)試請(qǐng)求頭中:輸入token
                .apis(RequestHandlerSelectors.basePackage("com.laptoy.zhxy.controller"))
                //過(guò)濾掉admin路徑下的所有頁(yè)面
                //.paths(Predicates.and(PathSelectors.regex("/sms/.*")))
                //過(guò)濾掉所有error或error.*頁(yè)面
                //.paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build()
                .globalOperationParameters(pars);

    }


    private ApiInfo webApiInfo() {

        return new ApiInfoBuilder()
                .title("網(wǎng)站-API文檔")
                .description("本文檔描述了網(wǎng)站微服務(wù)接口定義")
                .version("1.0")
                .contact(new Contact("Laptoy", "https://blog.csdn.net/apple_53947466", "laptoy458@163.com"))
                .build();
    }

    private ApiInfo adminApiInfo() {

        return new ApiInfoBuilder()
                .title("后臺(tái)管理系統(tǒng)-API文檔")
                .description("本文檔描述了后臺(tái)管理系統(tǒng)微服務(wù)接口定義")
                .version("1.0")
                .contact(new Contact("Laptoy", "https://blog.csdn.net/apple_53947466", "laptoy458@163.com"))
                .build();
    }

}

3.4、工具類

從資源直接粘貼到 util包

1、驗(yàn)證碼圖片工具類 - CreateVerifiCodeImage
2、token口令生成工具 - JwtHelper
3、解析request請(qǐng)求中的 token口令的工具 - AuthContextHolder
4、MD5加密工具類 - MD5
5、響應(yīng)結(jié)果類型碼枚舉 - ResultCodeEnum
6、JSON響應(yīng)結(jié)果格式封裝類 - Result
7、文件上傳工具類 - UploadFile


3.5、業(yè)務(wù)層

使用MybatisX插件進(jìn)行逆向生成

1、選中所有表
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
2、配置實(shí)體類
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
3、配置
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
4、每個(gè)impl添加 - @Transactional 開啟事務(wù)

5、最終效果
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

6、額外 - 實(shí)體類 LoginForm 封裝登錄表單信息

@Data
public class LoginForm {
    private String username;
    private String password;
    private String verifiCode;
    private Integer userType;
}

7、控制層 - 按照前端接口 /sms/xxxController 進(jìn)行編寫

@RestController
@RequestMapping("/sms/adminController")
public class AdminController {
}

@RestController
@RequestMapping("/sms/clazzController")
public class ClazzController {
}

@RestController
@RequestMapping("/sms/gradeController")
public class GradeController {
}

@RestController
@RequestMapping("/sms/teacherController")
public class TeacherController {
}

@RestController
@RequestMapping("/sms/studentController")
public class StudentController {
}

8、系統(tǒng)控制層(如驗(yàn)證碼)

@RestController
@RequestMapping("/sms/system")
public class SystemController {
}

四、登錄功能后臺(tái)實(shí)現(xiàn)

4.1、獲取驗(yàn)證碼

刷新頁(yè)面 - 驗(yàn)證碼API - /sms/system/getVerifiCodeImage
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


獲取驗(yàn)證碼圖片及向session中存儲(chǔ)驗(yàn)證碼功能實(shí)現(xiàn)

1、控制層 - SystemController

@Api(tags = "系統(tǒng)控制器")
@RestController
@RequestMapping("/sms/system")
public class SystemController {
	
    /**
     * 獲取驗(yàn)證碼及展示驗(yàn)證碼
     */
    @ApiOperation("獲取驗(yàn)證碼圖片")
    @GetMapping("/getVerifiCodeImage")
    public void getVerifiCodeImage(HttpServletRequest request, HttpServletResponse response) {
        // 獲取圖片及圖片上的驗(yàn)證碼
        BufferedImage verifiCodeImage = CreateVerifiCodeImage.getVerifiCodeImage();
        String verifiCode = String.valueOf(CreateVerifiCodeImage.getVerifiCode());

        // 將驗(yàn)證碼放入session,為驗(yàn)證做準(zhǔn)備
        HttpSession session = request.getSession();
        session.setAttribute("verifiCode", verifiCode);

        // 將驗(yàn)證碼圖片響應(yīng)給瀏覽器
        try {
            ImageIO.write(verifiCodeImage, "JPEG", response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2、效果
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


4.2、登錄校驗(yàn)功能

點(diǎn)擊登錄按鈕 - 登錄API - /sms/system/login
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


代碼實(shí)現(xiàn)

@Api(tags = "系統(tǒng)控制器")
@RestController
@RequestMapping("/sms/system")
public class SystemController {

    @Autowired
    private AdminService adminService;
    @Autowired
    private StudentService studentService;
    @Autowired
    private TeacherService teacherService;

	/**
     * 登錄驗(yàn)證
     */
    @ApiOperation("登錄請(qǐng)求驗(yàn)證")
    @PostMapping("/login")
    public Result login(@RequestBody LoginForm loginForm, HttpServletRequest request) {
        // 獲取用戶提交的驗(yàn)證碼和session域中的驗(yàn)證碼
        HttpSession session = request.getSession();
        String systemVerifiCode = (String) session.getAttribute("verifiCode");
        String loginVerifiCode = loginForm.getVerifiCode();

        // session過(guò)期,驗(yàn)證碼超時(shí)
        if ("".equals(systemVerifiCode)) {
            return Result.fail().message("驗(yàn)證碼失效,請(qǐng)刷新后重試");
        }

        // 驗(yàn)證碼錯(cuò)誤
        if (!loginVerifiCode.equalsIgnoreCase(systemVerifiCode)) {
            return Result.fail().message("驗(yàn)證碼有誤,請(qǐng)刷新后重新輸入");
        }

        // 驗(yàn)證碼使用完畢,移除當(dāng)前請(qǐng)求域中的驗(yàn)證碼
        session.removeAttribute("verifiCode");

        // 準(zhǔn)備一個(gè)Map集合,用戶存放響應(yīng)的信息
        Map<String, Object> map = new HashMap<>();

        // 根據(jù)用戶身份,驗(yàn)證登錄的用戶信息
        switch (loginForm.getUserType()) {
            case 1: // 管理員身份
                try {
                    // 調(diào)用服務(wù)層登錄方法,根據(jù)用戶提交的LoginInfo信息,查詢對(duì)應(yīng)的Admin對(duì)象,找不到返回Null
                    Admin login = adminService.login(loginForm);
                    if (null != login) {
                        // 登錄成功,將用戶id和用戶類型轉(zhuǎn)換為token口令,作為信息響應(yīng)給前端
                        map.put("token", JwtHelper.createToken(login.getId().longValue(), 1));
                    } else {
                        throw new RuntimeException("用戶名或者密碼有誤!");
                    }
                    return Result.ok(map);
                } catch (RuntimeException e) {
                    e.printStackTrace();
                    // 捕獲異常,向用戶響應(yīng)錯(cuò)誤信息
                    return Result.fail().message(e.getMessage());
                }

            case 2: // 學(xué)生身份
                try {
                    // 調(diào)用服務(wù)層登錄方法,根據(jù)用戶提交的LoginInfo信息,查詢對(duì)應(yīng)的Student對(duì)象,找不到返回Null
                    Student login = studentService.login(loginForm);
                    if (null != login) {
                        // 登錄成功,將用戶id和用戶類型轉(zhuǎn)換為token口令,作為信息響應(yīng)給前端
                        map.put("token", JwtHelper.createToken(login.getId().longValue(), 2));
                    } else {
                        throw new RuntimeException("用戶名或者密碼有誤!");
                    }
                    return Result.ok(map);
                } catch (RuntimeException e) {
                    e.printStackTrace();
                    // 捕獲異常,向用戶響應(yīng)錯(cuò)誤信息
                    return Result.fail().message(e.getMessage());
                }
            case 3: // 教師身份
                try {
                    // 調(diào)用服務(wù)層登錄方法,根據(jù)用戶提交的LoginInfo信息,查詢對(duì)應(yīng)的Student對(duì)象,找不到返回Null
                    Teacher login = teacherService.login(loginForm);
                    if (null != login) {
                        // 登錄成功,將用戶id和用戶類型轉(zhuǎn)換為token口令,作為信息響應(yīng)給前端
                        map.put("token", JwtHelper.createToken(login.getId().longValue(), 3));
                    } else {
                        throw new RuntimeException("用戶名或者密碼有誤!");
                    }
                    return Result.ok(map);
                } catch (RuntimeException e) {
                    e.printStackTrace();
                    // 捕獲異常,向用戶響應(yīng)錯(cuò)誤信息
                    return Result.fail().message(e.getMessage());
                }
        }
        // 查無(wú)此用戶,響應(yīng)失敗
        return Result.fail().message("查無(wú)此用戶");
    }

}

AdminService中的login方法

@Service
@Transactional
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin>
        implements AdminService {

    /**
     * 超級(jí)管理員登錄
     */
    @Override
    public Admin login(LoginForm loginForm) {
        QueryWrapper<Admin> wrapper = new QueryWrapper<>();
        wrapper.eq("name", loginForm.getUsername());
        // 轉(zhuǎn)換為密文進(jìn)行查詢
        wrapper.eq("password", MD5.encrypt(loginForm.getPassword()));

        Admin admin = baseMapper.selectOne(wrapper);

        return admin;
    }
}

StudentService中的login方法

@Service
@Transactional
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student>
        implements StudentService {

    /**
     * 學(xué)生登錄方法
     */
    @Override
    public Student login(LoginForm loginForm) {
        QueryWrapper<Student> wrapper = new QueryWrapper<>();
        wrapper.eq("name", loginForm.getUsername());
        wrapper.eq("password", MD5.encrypt(loginForm.getPassword()));
        return baseMapper.selectOne(wrapper);

    }
}

TeacherService中的login方法

@Service
@Transactional
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher>
        implements TeacherService {

    /**
     * Teacher登錄方法
     */
    @Override
    public Teacher login(LoginForm loginForm) {
        QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
        wrapper.eq("name", loginForm.getUsername());
        wrapper.eq("password", MD5.encrypt(loginForm.getPassword()));
        return baseMapper.selectOne(wrapper);
    }
}

2、登錄測(cè)試

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


4.3、跳轉(zhuǎn)至首頁(yè)功能實(shí)現(xiàn)

當(dāng)驗(yàn)證通過(guò)后,前端會(huì)產(chǎn)生第二個(gè)請(qǐng)求,用以獲取用戶的類型,然后根據(jù)用戶的類型來(lái)展現(xiàn)不同的頁(yè)面,所以后端要有一個(gè)根據(jù)token解析用戶類型并做出結(jié)果響應(yīng)的控制層

獲取信息API - /sms/system/getInfo
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


代碼實(shí)現(xiàn)

@Api(tags = "系統(tǒng)控制器")
@RestController
@RequestMapping("/sms/system")
public class SystemController {

    @Autowired
    private AdminService adminService;
    @Autowired
    private StudentService studentService;
    @Autowired
    private TeacherService teacherService;


    /**
     * 跳轉(zhuǎn)至首頁(yè)
     */
    @ApiOperation("通過(guò)token獲取用戶信息")
    @GetMapping("/getInfo")
    public Result getUserInfoByToken(HttpServletRequest request, @RequestHeader("token") String token) {
        // 檢查token 是否過(guò)期
        if (JwtHelper.isExpiration(token)) {
            return Result.build(null, ResultCodeEnum.TOKEN_ERROR);
        }

        // 解析token,獲取用戶id和用戶類型
        Long userId =JwtHelper.getUserId(token);
        Integer  userType =JwtHelper.getUserType(token);

        // 準(zhǔn)備一個(gè)Map集合用于存響應(yīng)的數(shù)據(jù)
        Map<String,Object> map=new HashMap<>();
        switch (userType){
            case 1:
                Admin admin = adminService.getAdminById(userId.intValue());
                map.put("user",admin);
                map.put("userType",1);
                break;
            case 2:
                Student student = studentService.getStudentById(userId.intValue());
                map.put("user",student);
                map.put("userType",2);
                break;

            case 3:
                Teacher teacher = teacherService.getTeacherById(userId.intValue());
                map.put("user",teacher);
                map.put("userType",3);
                break;
        }
        return  Result.ok(map);

    }
}

AdminService中的getAdminById方法

@Override
public Admin getAdminById(int intValue) {
    QueryWrapper<Admin> wrapper = new QueryWrapper<>();
    wrapper.eq("id",intValue);
    Admin admin = baseMapper.selectOne(wrapper);
    return admin;
}

StudentService中的getAdminById方法

@Override
public Student getStudentById(int intValue) {
    QueryWrapper<Student> wrapper = new QueryWrapper<>();
    wrapper.eq("id",intValue);
    Student student = baseMapper.selectOne(wrapper);
    return student;
}

TeacherService中的getAdminById方法

@Override
public Teacher getTeacherById(int intValue) {
    QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
    wrapper.eq("id",intValue);
    Teacher teacher = baseMapper.selectOne(wrapper);
    return teacher;
}

效果
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


4.4、API文檔展示

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


五、年級(jí)管理功能實(shí)現(xiàn)

5.1、查詢年級(jí)信息【分頁(yè)帶條件】

點(diǎn)擊年級(jí)管理模塊API - /sms/gradeController/getGrades/1/3
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


GradeController 控制層代碼

@Api(tags = "年級(jí)控制器")
@RestController
@RequestMapping("/sms/gradeController")
public class GradeController {

    @Autowired
    private GradeService gradeService;
	
	/**
     * 分頁(yè)展示數(shù)據(jù)
     */
    @ApiOperation("查詢年級(jí)信息,分頁(yè)帶條件")
    @GetMapping("/getGrades/{pageNo}/{pageSize}")
    public Result getGradeByOpr(
            @ApiParam("分頁(yè)查詢頁(yè)碼數(shù)") @PathVariable(value = "pageNo") Integer pageNo, // 頁(yè)碼數(shù)
            @ApiParam("分頁(yè)查詢頁(yè)大小") @PathVariable(value = "pageSize") Integer pageSize, // 頁(yè)大小
            @ApiParam("分頁(yè)查詢模糊匹配班級(jí)名") String gradeName) {
        // 設(shè)置分頁(yè)信息
        Page<Grade> page = new Page<>(pageNo, pageSize);
        // 調(diào)用服務(wù)層方法,傳入分頁(yè)信息,和查詢的條件
        IPage<Grade> pageRs = gradeService.getGradeByOpr(page, gradeName);
        return Result.ok(pageRs);
    }

}

GradeServiceImpl 業(yè)務(wù)層代碼

@Service
@Transactional
public class GradeServiceImpl extends ServiceImpl<GradeMapper, Grade> implements GradeService {

    @Override
    public IPage<Grade> getGradeByOpr(Page<Grade> page, String gradeName) {

        QueryWrapper<Grade> wrapper = new QueryWrapper<>();
        if (!StringUtils.isEmpty(gradeName)) {
            wrapper.like("name", gradeName);
        }
        wrapper.orderByAsc("id");
        
        Page<Grade> gradePage = baseMapper.selectPage(page, wrapper);

        return gradePage;
    }
}


5.2、添加和修改年級(jí)信息

點(diǎn)擊添加年級(jí)按鈕輸入數(shù)據(jù)執(zhí)行添加API - /sms/gradeController/saveOrUpdateGrade
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


Controller層代碼

@Api(tags = "年級(jí)控制器")
@RestController
@RequestMapping("/sms/gradeController")
public class GradeController {

    @Autowired
    private GradeService gradeService;
	
	/**
     * 保存或更新信息
     */
    @ApiOperation("添加或者修改年級(jí)信息")
    @PostMapping("/saveOrUpdateGrade")
    public Result saveOrUpdateGrade(@ApiParam("JSON的grade對(duì)象轉(zhuǎn)換后臺(tái)數(shù)據(jù)模型") @RequestBody Grade grade) {

        // 調(diào)用服務(wù)層方法,實(shí)現(xiàn)添加或者修改年級(jí)信息
        gradeService.saveOrUpdate(grade);
        return Result.ok();
    }

}

5.3、刪除和批量刪除年級(jí)信息

點(diǎn)擊刪除按鈕API - sms/gradeController/deleteGrade (這張截圖后面補(bǔ)截的)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


Controller層代碼

@Api(tags = "年級(jí)控制器")
@RestController
@RequestMapping("/sms/gradeController")
public class GradeController {

    @Autowired
    private GradeService gradeService;

	/**
     * 刪除或批量刪除
     */
    @ApiOperation("刪除一個(gè)或者多個(gè)grade信息")
    @DeleteMapping("/deleteGrade")
    public Result deleteGradeById(@ApiParam("JSON的年級(jí)id集合,映射為后臺(tái)List<Integer>") @RequestBody List<Integer> ids) {
        gradeService.removeByIds(ids);
        return Result.ok();
    }

}

5.4、API文檔展示

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


六、班級(jí)管理功能實(shí)現(xiàn)

6.1、回顯搜索條件中的年級(jí)選項(xiàng)

點(diǎn)擊班級(jí)管理模塊 - 年級(jí)名稱API - /sms/gradeController/getGrades
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


控制層

@Api(tags = "年級(jí)控制器")
@RestController
@RequestMapping("/sms/gradeController")
public class GradeController {

    @Autowired
    private GradeService gradeService;
    
	/**
	 * 回顯搜索條件中的年級(jí)選項(xiàng)
	 */
	@ApiOperation("獲取所有Grade信息")
	@GetMapping("/getGrades")
	public Result getGrades(){
	    List<Grade> grades = gradeService.getGrades();
	    return Result.ok(grades);
	}

}

業(yè)務(wù)層

@Service
@Transactional
public class GradeServiceImpl extends ServiceImpl<GradeMapper, Grade> implements GradeService {

	@Override
	public List<Grade> getGrades() {
	    return baseMapper.selectList(null);
	}
}

6.2、查詢班級(jí)信息【分頁(yè)帶條件】

點(diǎn)擊年級(jí)管理模塊API - /sms/clazzController/getClazzsByOpr/1/3
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


控制層

@Api(tags = "班級(jí)控制器")
@RestController
@RequestMapping("/sms/clazzController")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;

    @ApiOperation("查詢班級(jí)信息,分頁(yè)帶條件")
    @GetMapping("/getClazzsByOpr/{pageNo}/{pageSize}")
    public Result getClazzsByOpr(@ApiParam("頁(yè)碼數(shù)") @PathVariable("pageNo") Integer pageNo,
                                 @ApiParam("頁(yè)大小") @PathVariable("pageSize") Integer pageSize,
                                 @ApiParam("查詢條件") Clazz clazz) {
        //設(shè)置分頁(yè)信息
        Page<Clazz> page = new Page<>(pageNo, pageSize);
        IPage<Clazz> iPage = clazzService.getClazzsByOpr(page, clazz);
        return Result.ok(iPage);
    }

}

業(yè)務(wù)層

@Service
@Transactional
public class ClazzServiceImpl extends ServiceImpl<ClazzMapper, Clazz> implements ClazzService {

    /**
     * 分頁(yè)查詢所有班級(jí)信息【帶條件】
     *
     * @param clazz
     * @return
     */
    @Override
    public IPage<Clazz> getClazzsByOpr(Page<Clazz> pageParam, Clazz clazz) {
        QueryWrapper<Clazz> queryWrapper = new QueryWrapper<>();
        if (clazz != null) {
            //年級(jí)名稱條件
            String gradeName = clazz.getGradeName();
            if (!StringUtils.isEmpty(gradeName)) {
                queryWrapper.eq("grade_name", gradeName);
            }
            //班級(jí)名稱條件
            String clazzName = clazz.getName();
            if (!StringUtils.isEmpty(clazzName)) {
                queryWrapper.like("name", clazzName);
            }
            queryWrapper.orderByAsc("id");
        }
        Page<Clazz> clazzPage = baseMapper.selectPage(pageParam, queryWrapper);
        return clazzPage;
    }
}

6.3、添加和修改學(xué)生信息

添加功能API - sms/clazzController/saveOrUpdateClazz
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


控制層

@Api(tags = "班級(jí)控制器")
@RestController
@RequestMapping("/sms/clazzController")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;
    
	@ApiOperation("保存或者修改班級(jí)信息")
	@PostMapping("/saveOrUpdateClazz")
	public Result saveOrUpdateClazz(@ApiParam("JSON轉(zhuǎn)換后端Clazz數(shù)據(jù)模型") @RequestBody Clazz clazz) {
	    clazzService.saveOrUpdate(clazz);
	    return Result.ok();
	}
}

6.4、刪除和批量刪除班級(jí)信息

刪除功能API - sms/clazzController/deleteClazz
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


控制層

@Api(tags = "班級(jí)控制器")
@RestController
@RequestMapping("/sms/clazzController")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;

	@ApiOperation("刪除一個(gè)或者多個(gè)班級(jí)信息")
	@DeleteMapping("/deleteClazz")
	public Result deleteClazzByIds(@ApiParam("多個(gè)班級(jí)id的JSON") @RequestBody List<Integer> ids) {
	    clazzService.removeByIds(ids);
	    return Result.ok();
	}
}

6.5、API文檔展示

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


七、學(xué)生管理功能實(shí)現(xiàn)

7.1、回顯搜索條件的班級(jí)選項(xiàng)

點(diǎn)擊教師管理API - sms/clazzController/getClazzs
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


控制層

@Api(tags = "班級(jí)控制器")
@RestController
@RequestMapping("/sms/clazzController")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;
	
	@ApiOperation("獲取所有Clazz信息")
	@GetMapping("/getClazzs")
	public Result getClazzs() {
	    List<Clazz> list = clazzService.getClazzs();
	    return Result.ok(list);
	}
}

業(yè)務(wù)層

@Service
@Transactional
public class ClazzServiceImpl extends ServiceImpl<ClazzMapper, Clazz> implements ClazzService {

	@Override
	public List<Clazz> getClazzs() {
	    return baseMapper.selectList(null);
	}
}

7.2、查詢學(xué)生信息【分頁(yè)帶條件】

控制層

@Api(tags = "學(xué)生控制器")
@RestController
@RequestMapping("/sms/studentController")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @ApiOperation("查詢學(xué)生信息,分頁(yè)帶條件")
    @GetMapping("/getStudentByOpr/{pageNo}/{pageSize}")
    public Result getStudentsByOpr(@ApiParam("頁(yè)碼數(shù)") @PathVariable("pageNo") Integer pageNo,
                                   @ApiParam("頁(yè)大小") @PathVariable("pageSize") Integer pageSize,
                                   @ApiParam("查詢條件轉(zhuǎn)換后端數(shù)據(jù)模型") Student student) {
        // 準(zhǔn)備分頁(yè)信息封裝的page對(duì)象
        Page<Student> page = new Page<>(pageNo, pageSize);
        // 獲取分頁(yè)的學(xué)生信息
        IPage<Student> iPage = studentService.getStudentByOpr(page, student);
        // 返回學(xué)生信息
        return Result.ok(iPage);
    }
}

業(yè)務(wù)層

@Service
@Transactional
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {

	/**
	 * 按條件查詢學(xué)生信息【帶分頁(yè)】
	 */
	public IPage<Student> getStudentByOpr(Page<Student> pageParam, Student student) {
	    QueryWrapper<Student> queryWrapper = null;
	    if (student != null) {
	        queryWrapper = new QueryWrapper<>();
	        if (student.getClazzName() != null) {
	            queryWrapper.eq("clazz_name", student.getClazzName());
	        }
	        if (student.getName() != null) {
	            queryWrapper.like("name", student.getName());
	        }
	        queryWrapper.orderByAsc("id");
	    }
	    //創(chuàng)建分頁(yè)對(duì)象
	    IPage<Student> pages = baseMapper.selectPage(pageParam, queryWrapper);
	    return pages;
	}
}

7.3、異步圖片上傳處理頭像

Controller層代碼

@Api(tags = "系統(tǒng)控制器")
@RestController
@RequestMapping("/sms/system")
public class SystemController {

	@ApiOperation("頭像上傳統(tǒng)一入口")
	@PostMapping("/headerImgUpload")
	public Result headerImgUpload(@ApiParam("文件二進(jìn)制數(shù)據(jù)") @RequestPart("multipartFile") MultipartFile multipartFile) {
	    //使用UUID隨機(jī)生成文件名
	    String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
	    //生成新的文件名字
	    String filename = uuid.concat(multipartFile.getOriginalFilename());
	    //生成文件的保存路徑(實(shí)際生產(chǎn)環(huán)境這里會(huì)使用真正的文件存儲(chǔ)服務(wù)器)
	    String portraitPath = "D:/MyCode/IdeaCode/zhxy/target/classes/public/upload/".concat(filename);
	    //保存文件
	    try {
	        multipartFile.transferTo(new File(portraitPath));
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    String headerImg = "upload/" + filename;
	    return Result.ok(headerImg);
	}
}

7.4、添加和修改和刪除學(xué)生信息

@Api(tags = "學(xué)生控制器")
@RestController
@RequestMapping("/sms/studentController")
public class StudentController {

	@ApiOperation("增加學(xué)生信息")
	@PostMapping("/addOrUpdateStudent")
	public Result addOrUpdateStudent(@RequestBody Student student) {
	    //對(duì)學(xué)生的密碼進(jìn)行加密
	    if (!Strings.isEmpty(student.getPassword())) {
	        student.setPassword(MD5.encrypt(student.getPassword()));
	    }
	    //保存學(xué)生信息進(jìn)入數(shù)據(jù)庫(kù)
	    studentService.saveOrUpdate(student);
	    return Result.ok();
	}
	
	@ApiOperation("刪除一個(gè)或者多個(gè)學(xué)生信息")
	@DeleteMapping("/delStudentById")
	public Result delStudentById(@ApiParam("多個(gè)學(xué)生id的JSON") @RequestBody List<Integer> ids) {
	    studentService.removeByIds(ids);
	    return Result.ok();
	}

}

八、教師管理功能實(shí)現(xiàn)

8.1、查詢教師信息【分頁(yè)帶條件】

點(diǎn)擊教師管理API - sms/teacherController/getTeachers/1/3
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)


控制層

@Api(tags = "教師控制器")
@RestController
@RequestMapping("/sms/teacherController")
public class TeacherController {

    @Autowired
    private TeacherService teacherService;

    @ApiOperation("獲取教師信息,分頁(yè)帶條件")
    @GetMapping("/getTeachers/{pageNo}/{pageSize}")
    public Result getTeachers(@PathVariable Integer pageNo, @PathVariable Integer pageSize, Teacher teacher) {

        Page<Teacher> pageParam = new Page<>(pageNo, pageSize);
        IPage<Teacher> page = teacherService.getTeachersByOpr(pageParam, teacher);

        return Result.ok(page);
    }

}

業(yè)務(wù)層

@Service
@Transactional
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {

	@Override
	public IPage<Teacher> getTeachersByOpr(Page<Teacher> pageParam, Teacher teacher) {
	    QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
	    if (teacher != null) {
	        //班級(jí)名稱條件
	        String clazzName = teacher.getClazzName();
	        if (!StringUtils.isEmpty(clazzName)) {
	            wrapper.eq("clazz_name", clazzName);
	        }
	        //教師名稱條件
	        String teacherName = teacher.getName();
	        if (!StringUtils.isEmpty(teacherName)) {
	            wrapper.like("name", teacherName);
	        }
	        wrapper.orderByAsc("id");
	    }
	    Page<Teacher> page = baseMapper.selectPage(pageParam, wrapper);
	    return page;
	}
}

8.2、添加和修改和刪除教師信息

@ApiOperation("添加和修改教師信息")
@PostMapping("/saveOrUpdateTeacher")
public Result saveOrUpdateTeacher(@RequestBody Teacher teacher) {
    teacherService.saveOrUpdate(teacher);
    return Result.ok();
}

@ApiOperation("刪除一個(gè)或者多個(gè)教師信息")
@DeleteMapping("/deleteTeacher")
public Result deleteTeacher(@RequestBody List<Integer> ids) {
    teacherService.removeByIds(ids);
    return Result.ok();
}

九、管理員管理功能實(shí)現(xiàn)

9.1、查詢管理員信息【分頁(yè)帶條件】

控制層

@Api(tags = "系統(tǒng)管理員控制器")
@RestController
@RequestMapping("/sms/adminController")
public class AdminController {


    @Autowired
    private AdminService adService;

    @ApiOperation("分頁(yè)獲取所有Admin信息【帶條件】")
    @GetMapping("/getAllAdmin/{pageNo}/{pageSize}")
    public Result getAllAdmin(@PathVariable Integer pageNo,
                              @PathVariable Integer pageSize,
                              String adminName){
        Page<Admin> pageParam = new Page<>(pageNo,pageSize);
        IPage<Admin> page = adService.getAdmins(pageParam, adminName);
        return Result.ok(page);
    }
}

業(yè)務(wù)層

@Service
@Transactional
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {

	@Override
	public IPage<Admin> getAdmins(Page<Admin> pageParam, String adminName) {
	    QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
	    if (!StringUtils.isEmpty(adminName)) {
	        queryWrapper.like("name", adminName);
	    }
	    queryWrapper.orderByAsc("id");
	    Page page = baseMapper.selectPage(pageParam, queryWrapper);
	    return page;
	}
}

9.2、添加和修改和刪除管理員信息

@ApiOperation("添加或修改Admin信息")
@PostMapping("/saveOrUpdateAdmin")
public Result saveOrUpdateAdmin(@RequestBody Admin admin){
    if (!Strings.isEmpty(admin.getPassword())) {
        admin.setPassword(MD5.encrypt(admin.getPassword()));
    }
    adService.saveOrUpdate(admin);
    return Result.ok();
}

@ApiOperation("刪除Admin信息")
@DeleteMapping("/deleteAdmin")
public Result deleteAdmin(@RequestBody List<Integer> ids){
    adService.removeByIds(ids);
    return Result.ok();
}

9.3、管理員修改自己的密碼

Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

@Api(tags = "系統(tǒng)控制器")
@RestController
@RequestMapping("/sms/system")
public class SystemController {

    @Autowired
    private AdminService adminService;
    @Autowired
    private StudentService studentService;
    @Autowired
    private TeacherService teacherService;


	@ApiOperation("修改密碼")
	@PostMapping("/updatePwd/{oldPwd}/{newPwd}")
	public Result updatePwd(@RequestHeader("token") String token,
	                        @PathVariable("oldPwd") String oldPwd,
	                        @PathVariable("newPwd") String newPwd) {
	    if (JwtHelper.isExpiration(token)) {
	        // token過(guò)期
	        return Result.fail().message("token失效");
	    }
	    // 通過(guò)token獲取當(dāng)前登錄的用戶id
	    Long userId = JwtHelper.getUserId(token);
	    // 通過(guò)token獲取當(dāng)前登錄的用戶類型
	    Integer userType = JwtHelper.getUserType(token);
	    // 將明文密碼轉(zhuǎn)換為暗文
	    oldPwd = MD5.encrypt(oldPwd);
	    newPwd = MD5.encrypt(newPwd);
	    if (userType == 1) {
	        QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
	        queryWrapper.eq("id", userId.intValue()).eq("password", oldPwd);
	        Admin admin = adminService.getOne(queryWrapper);
	        if (null != admin) {
	            admin.setPassword(newPwd);
	            adminService.saveOrUpdate(admin);
	        } else {
	            return Result.fail().message("原密碼輸入有誤!");
	        }
	    } else if (userType == 2) {
	        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
	        queryWrapper.eq("id", userId.intValue()).eq("password", oldPwd);
	        Student student = studentService.getOne(queryWrapper);
	        if (null != student) {
	            student.setPassword(newPwd);
	            studentService.saveOrUpdate(student);
	        } else {
	            return Result.fail().message("原密碼輸入有誤!");
	        }
	    } else if (userType == 3) {
	        QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
	        queryWrapper.eq("id", userId.intValue()).eq("password", oldPwd);
	        Teacher teacher = teacherService.getOne(queryWrapper);
	        if (null != teacher) {
	            teacher.setPassword(newPwd);
	            teacherService.saveOrUpdate(teacher);
	        } else {
	            return Result.fail().message("原密碼輸入有誤!");
	        }
	    }
	    return Result.ok();
	}
}

十、畢業(yè)設(shè)計(jì)相關(guān)指導(dǎo)

10.1、開題報(bào)告

1、課題的名稱

  • 智慧校園管理系統(tǒng)
  • 智能校園管理系統(tǒng)
  • 智慧校園云臺(tái)系統(tǒng)

2、設(shè)計(jì)課題的目標(biāo)和意義

  • 對(duì)使用者的意義 提高使用者工作效率,遠(yuǎn)程辦公
  • 對(duì)企業(yè)或者學(xué)校的意義 精簡(jiǎn)學(xué)校的管理人員,節(jié)約成本,提高效率
  • 對(duì)社會(huì)的意義 為教育行業(yè)提供一個(gè)優(yōu)秀的管理解決方案
  • 技術(shù)層次的意義 更新項(xiàng)目的使用技術(shù),功能拓展和性能提升更加方便容易

3、預(yù)期目標(biāo)及成果形式
Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)

4、 成果的展現(xiàn)形式

項(xiàng)目成果展示+畢業(yè)論文

5、開發(fā)工具和技術(shù)棧

  • 操作系統(tǒng)的選擇:開發(fā)者使用Windows10 /11 ,項(xiàng)目運(yùn)行環(huán)境為L(zhǎng)inux.服務(wù)容器使用Tomcat

  • 開發(fā)使用的工具

    • 前端開發(fā)工具為HbuilderX,配合NodeJS運(yùn)行時(shí)
    • 后端開發(fā)工具為Idea,使用maven作為項(xiàng)目構(gòu)建工具
  • 數(shù)據(jù)庫(kù)管理系統(tǒng):mysql8作為數(shù)據(jù)庫(kù)服務(wù),同時(shí)配合Navicat/Sqlyog可視化數(shù)據(jù)庫(kù)前端工具

  • 相關(guān)框架

    • VUE 獨(dú)立開發(fā)前端代碼
    • SpringBoot快速搭建后端服務(wù)
    • MyBatisPlus快速實(shí)現(xiàn)數(shù)據(jù)操作,同時(shí)優(yōu)化業(yè)務(wù)層代碼
    • swagger2快速生成接口文檔,同時(shí)可以幫助接口測(cè)試
    • fastjson快速實(shí)現(xiàn)前后端數(shù)據(jù)轉(zhuǎn)換
    • commons-fileupload快速實(shí)現(xiàn)文件上傳

6、項(xiàng)目的架構(gòu)模式和開發(fā)模式

  • 架構(gòu)模式: MVC三層技術(shù)模型
  • 開發(fā)模式:前后端分離的開發(fā)模式

7、進(jìn)度和計(jì)劃

  • 需求分析 在導(dǎo)師的指導(dǎo)下,同時(shí)閱讀相關(guān)文獻(xiàn),了解學(xué)校的實(shí)際的管理工作內(nèi)容,同時(shí)接受一些新的管理理念,完成需求調(diào)研
  • 數(shù)據(jù)庫(kù)設(shè)計(jì) 在明確需求的情況下,對(duì)數(shù)據(jù)庫(kù)進(jìn)行設(shè)計(jì)
  • 資料收集 根據(jù)要應(yīng)用的技術(shù),大量閱讀資料,收集相關(guān)文獻(xiàn),問(wèn)后續(xù)的編碼做準(zhǔn)備
  • 接口設(shè)計(jì) 根據(jù)具體的業(yè)務(wù)項(xiàng),開始逐一設(shè)計(jì)接口
  • 模塊實(shí)現(xiàn) 具體功能的實(shí)現(xiàn)
  • 測(cè)試程序,整理資料,撰寫文檔

8、參考的相關(guān)資料

中國(guó)知網(wǎng): 搜索關(guān)鍵字 校園管理 VUE SpringBoot MyBatisPlus swagger2


10.2、畢設(shè)編寫

目錄

1 論文名稱

2 摘要

3 緒論

4 相關(guān)技術(shù)介紹

5 系統(tǒng)需求分析

6 系統(tǒng)概要設(shè)計(jì)

7 系統(tǒng)各功能模塊的詳細(xì)設(shè)計(jì)

8 系統(tǒng)實(shí)現(xiàn)中關(guān)鍵的問(wèn)題和解決方案

9 系統(tǒng)測(cè)試及實(shí)現(xiàn)效果

10 總結(jié)與展望

11 參考文獻(xiàn)

12 致謝


1、論文名稱

  • 名稱不要太短
  • 工程類項(xiàng)目且有成果展示可以叫 ***設(shè)計(jì)與實(shí)現(xiàn)
  • 如果在理論上有一些建樹,可以叫***理論研究

如:智慧校園云端管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)


2、 摘要

  • 項(xiàng)目的背景介紹:可以參考開題報(bào)告中,課題的目標(biāo)和意義
  • 畢業(yè)設(shè)計(jì)過(guò)程
    • 管理類知識(shí)和理論的學(xué)習(xí),引入了互聯(lián)網(wǎng)的管理思維
    • 結(jié)合實(shí)際校園工作內(nèi)容,設(shè)計(jì)了那些業(yè)務(wù)
    • 具體功能模塊有那些,實(shí)現(xiàn)了那些業(yè)務(wù)
  • 本項(xiàng)目的開發(fā)和測(cè)試中遇見的難點(diǎn),遇見的問(wèn)題,以及解決方案
    • cookie session問(wèn)題,登錄的失效問(wèn)題,用戶權(quán)限問(wèn)題,數(shù)據(jù)安全問(wèn)題… …
  • 成果說(shuō)明:目前項(xiàng)目取得那些成果,完成了那些功能的開發(fā),實(shí)際使用的體驗(yàn)感等
  • 關(guān)鍵詞:校園管理 SpringBoot+VUE SpringBoot+MyBatisPlus Swagger2 前后端分離

3、緒論(第一章)

  • 論文設(shè)計(jì)的背景和意義 (管理相關(guān)的,互聯(lián)網(wǎng)技術(shù)對(duì)于管理方式的革命性影響)
  • 國(guó)內(nèi)外現(xiàn)狀和社會(huì)現(xiàn)狀 (互聯(lián)網(wǎng)技術(shù)在管理方面的應(yīng)用已經(jīng)滲入到各行各業(yè),帶來(lái)了效率的提高,教育行業(yè)也應(yīng)該使用)
  • 論文的主要內(nèi)容介紹

本文主要進(jìn)行了互聯(lián)網(wǎng)時(shí)代校園管理的設(shè)計(jì)和實(shí)現(xiàn). 由于… 因此… 本文在深入分析Vue+SpringBoot+MyBatisPlus的技術(shù)前提下,提出了一套校園管理的軟件系統(tǒng)并詳細(xì)闡述了技術(shù)選型和實(shí)現(xiàn)過(guò)程. 需求如何分析的,數(shù)據(jù)庫(kù)如何設(shè)計(jì)的,技術(shù)如何選型的,項(xiàng)目如何搭建的. 過(guò)程是如何開發(fā)的

  • 論文的組織結(jié)構(gòu)

    • 第一章 緒論 ?
    • 第二章 技術(shù)選型 +配合內(nèi)容介紹
    • 第三章 系統(tǒng)需求分析
    • 第四章 … …

4、核心組件技術(shù)介紹(第二章)

  • VUE技術(shù)介紹 歷史 背景 特點(diǎn) 優(yōu)點(diǎn) 原理
  • SSM技術(shù)介紹與分析
  • SpringBoot技術(shù)介紹
  • MyBatisPlus技術(shù)介紹
  • Swagger2技術(shù)介紹
  • MVC架構(gòu)
  • 前后端分離開發(fā)和部署模式

5、系統(tǒng)需求分析(第三章)

  • 功能需求分析

    • 數(shù)據(jù)庫(kù)的設(shè)計(jì)
    • 登錄的控制
    • 年級(jí)模塊
    • 班級(jí)模塊
    • 教師模塊
    • 學(xué)生模塊
    • 管理員模塊
    • 個(gè)人信息管理模塊
    • 權(quán)限的控制
  • 非功能需求

    • 可靠性
    • 可擴(kuò)展性
    • 易用性
    • 其他約束

6、軟件安裝和項(xiàng)目環(huán)境搭建(第四章)

  • 系統(tǒng)環(huán)境的準(zhǔn)備
  • 軟件的安裝
  • 項(xiàng)目的搭建
  • 運(yùn)行檢測(cè)

7、系統(tǒng)各功能模塊的實(shí)現(xiàn)(第五章)

例如:驗(yàn)證碼功能的實(shí)現(xiàn)

1、效果截圖

業(yè)務(wù)分析 當(dāng)加載登錄頁(yè)時(shí),前端項(xiàng)目自動(dòng)向后端請(qǐng)求一個(gè)驗(yàn)證碼圖片并展示在頁(yè)面上,后端生成驗(yàn)證碼后響應(yīng)給前端,并將 驗(yàn)證碼圖片上的文本存儲(chǔ)在session中,可以采用時(shí)序圖,流程圖等

2、接口介紹

  • 請(qǐng)求方式 GET
  • 請(qǐng)求的URI /sms/system/getVerifiCodeImage
  • 請(qǐng)求的數(shù)據(jù): none
  • 響應(yīng)的數(shù)據(jù): image/jpeg

3、核心代碼實(shí)現(xiàn)


8、系統(tǒng)實(shí)現(xiàn)中關(guān)鍵的問(wèn)題和解決方案(第六章)

  • 問(wèn)題1 前后端分離開發(fā),接口文檔和接口測(cè)試問(wèn)題:解決方案是: swagger2
  • 問(wèn)題2 cookie和Session控制登錄校驗(yàn)的有效期問(wèn)題:解決方案是:token
  • 問(wèn)題3 管理員,教師,學(xué)生三個(gè)身份登錄后權(quán)限不同:解決方案是:根據(jù)用戶類型查詢不同的表格,根據(jù)不同的類型展示不同的頁(yè)面
  • 問(wèn)題4 數(shù)據(jù)安全問(wèn)題:解決方案是:MD5加密,密碼的校驗(yàn)在密文狀態(tài)下

9、系統(tǒng)測(cè)試及實(shí)現(xiàn)效果(第七章)

每個(gè)業(yè)務(wù)如何使用swagger2測(cè)試,在這里進(jìn)行介紹

刪除學(xué)生信息測(cè)試

  • 請(qǐng)求的URI
  • 請(qǐng)求的方式
  • 請(qǐng)求要提交的數(shù)據(jù)
  • 響應(yīng)的數(shù)據(jù)

swagger2測(cè)試的結(jié)果效果截圖


10、總結(jié)與展望(第八章)

  • 夸夸自己和導(dǎo)師 業(yè)務(wù)完整實(shí)現(xiàn),技術(shù)選型新,開發(fā)過(guò)程流暢. 系統(tǒng)的可靠性,擴(kuò)展性,易用性
  • 展望未來(lái) 目前項(xiàng)目的設(shè)計(jì)還缺少具體的針對(duì)性,針對(duì)某個(gè)學(xué)校的業(yè)務(wù)工作流程繼續(xù)細(xì)化,繼續(xù)添加功能 打卡,考勤統(tǒng)計(jì),成績(jī)統(tǒng)計(jì)分析… …

11、參考文獻(xiàn)


12、致謝


10.3、答辯PPT編寫

主要包含的內(nèi)容

首頁(yè) 課題+答辯人+指導(dǎo)教師

第二頁(yè) 后面的內(nèi)容

第三頁(yè) 目的和意義

第四頁(yè) 系統(tǒng)的需求

第五頁(yè) 項(xiàng)目的架構(gòu)和技術(shù)棧

第六頁(yè) 系統(tǒng)測(cè)試及實(shí)現(xiàn)效果

第七頁(yè) 總結(jié)和展望

第八頁(yè) 致謝文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-404060.html

到了這里,關(guān)于Java畢設(shè)項(xiàng)目:智慧校園管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【畢設(shè)精選】基于微信小程序的校園跑腿+后臺(tái)管理系統(tǒng)

    【畢設(shè)精選】基于微信小程序的校園跑腿+后臺(tái)管理系統(tǒng)

    ??全網(wǎng)粉絲10W+、全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、掘金、阿里云等社區(qū)博客專家、專注于全棧領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn)?? 文章最下面有微信,獲取完整源碼和數(shù)據(jù)庫(kù),沒(méi)有套路,沒(méi)有套路,沒(méi)有套路?。?! 網(wǎng)上大部分的畢設(shè)套路如下: 在b站發(fā)畢設(shè)項(xiàng)目的演示視頻,讓你免費(fèi)領(lǐng)取,你領(lǐng)取

    2024年02月13日
    瀏覽(23)
  • 【畢設(shè)不求人】基于微信小程序的校園跑腿+后臺(tái)管理系統(tǒng)

    【畢設(shè)不求人】基于微信小程序的校園跑腿+后臺(tái)管理系統(tǒng)

    ??全網(wǎng)粉絲10W+、全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、掘金、阿里云等社區(qū)博客專家、專注于全棧領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn)?? 文章最下面有微信,獲取完整源碼和數(shù)據(jù)庫(kù),沒(méi)有套路,沒(méi)有套路,沒(méi)有套路!??! 網(wǎng)上大部分的畢設(shè)套路如下: 在b站發(fā)畢設(shè)項(xiàng)目的演示視頻,讓你免費(fèi)領(lǐng)取,你領(lǐng)取

    2024年02月09日
    瀏覽(25)
  • 計(jì)算機(jī)畢業(yè)設(shè)計(jì) 智慧養(yǎng)老中心管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) Java實(shí)戰(zhàn)項(xiàng)目 附源碼+文檔+視頻講解

    計(jì)算機(jī)畢業(yè)設(shè)計(jì) 智慧養(yǎng)老中心管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) Java實(shí)戰(zhàn)項(xiàng)目 附源碼+文檔+視頻講解

    博主介紹:?從事軟件開發(fā)10年之余,專注于Java技術(shù)領(lǐng)域、Python人工智能及數(shù)據(jù)挖掘、小程序項(xiàng)目開發(fā)和Android項(xiàng)目開發(fā)等。CSDN、掘金、華為云、InfoQ、阿里云等平臺(tái)優(yōu)質(zhì)作者? ??文末獲取源碼聯(lián)系?? ???? 精彩專欄推薦訂閱???? 不然下次找不到喲 ——————————

    2024年02月04日
    瀏覽(21)
  • 智慧校園管理云平臺(tái)電子班牌系統(tǒng)源碼,數(shù)據(jù)管理、信息發(fā)布、家?;ネ?、物聯(lián)控制、教務(wù)管理、日常辦公、人臉識(shí)別

    智慧校園管理云平臺(tái)電子班牌系統(tǒng)源碼,數(shù)據(jù)管理、信息發(fā)布、家?;ネ?、物聯(lián)控制、教務(wù)管理、日常辦公、人臉識(shí)別

    智慧校園平臺(tái)源碼?智慧校園云平臺(tái)電子班牌系統(tǒng)源碼? 一款全功能智慧校園管理云平臺(tái)電子班牌系統(tǒng)源碼, 融合了多媒體信息發(fā)布、家?;ネ?、物聯(lián)控制、教務(wù)管理、日常辦公等一系列應(yīng)用,是校園管理的現(xiàn)代手段。 電子班牌 系統(tǒng)的主要功能包括 :數(shù)據(jù)信息管理、 班級(jí)管

    2024年02月06日
    瀏覽(32)
  • 計(jì)算機(jī)畢業(yè)設(shè)計(jì) 基于SpringBoot智慧養(yǎng)老中心管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) Javaweb項(xiàng)目 Java實(shí)戰(zhàn)項(xiàng)目 前后端分離 文檔報(bào)告 代碼講解 安裝調(diào)試

    計(jì)算機(jī)畢業(yè)設(shè)計(jì) 基于SpringBoot智慧養(yǎng)老中心管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) Javaweb項(xiàng)目 Java實(shí)戰(zhàn)項(xiàng)目 前后端分離 文檔報(bào)告 代碼講解 安裝調(diào)試

    ??作者:計(jì)算機(jī)編程-吉哥 ??簡(jiǎn)介:專業(yè)從事JavaWeb程序開發(fā),微信小程序開發(fā),定制化項(xiàng)目、 源碼、代碼講解、文檔撰寫、ppt制作。做自己喜歡的事,生活就是快樂(lè)的。 ??心愿:點(diǎn)贊 ?? 收藏 ?評(píng)論 ?? ?? 文末獲取源碼聯(lián)系 ???? 精彩專欄推薦訂閱 ???? 不然下次找不

    2024年02月07日
    瀏覽(31)
  • 開源項(xiàng)目-erp企業(yè)資源管理系統(tǒng)(畢設(shè))

    開源項(xiàng)目-erp企業(yè)資源管理系統(tǒng)(畢設(shè))

    哈嘍,大家好,今天給大家?guī)?lái)一個(gè)開源項(xiàng)目-erp企業(yè)資源管理系統(tǒng),項(xiàng)目通過(guò)ssh+oracle技術(shù)實(shí)現(xiàn)。 系統(tǒng)主要有基礎(chǔ)數(shù)據(jù),人事管理,采購(gòu)管理,銷售管理,庫(kù)存管理,權(quán)限管理模塊 基礎(chǔ)數(shù)據(jù)有商品類型,商品,供應(yīng)商,客戶,倉(cāng)庫(kù)管理功能 ? ?

    2024年02月15日
    瀏覽(31)
  • springboot/ssm校園菜鳥驛站管理系統(tǒng)Java校園快遞取件管理系統(tǒng)

    springboot/ssm校園菜鳥驛站管理系統(tǒng)Java校園快遞取件管理系統(tǒng) 開發(fā)語(yǔ)言:Java 框架:springboot(可改ssm) + vue JDK版本:JDK1.8(或11) 服務(wù)器:tomcat 數(shù)據(jù)庫(kù):mysql 5.7(或8.0) 數(shù)據(jù)庫(kù)工具:Navicat 開發(fā)軟件:eclipse//idea 依賴管理包:Maven 如需了解更多代碼細(xì)節(jié)或修改代碼功能界面,

    2024年02月20日
    瀏覽(24)
  • java校園行為分析預(yù)警管理系統(tǒng)

    java校園行為分析預(yù)警管理系統(tǒng)

    目 ?錄 摘 ?要?? ?II ABSTRACT?? ?III 第一章 緒論?? ?1 1.1研究背景?? ?1 1.2選題目的?? ?1 1.3本文研究?jī)?nèi)容?? ?2 第二章 ?開發(fā)技術(shù)介紹?? ?3 2.1開發(fā)工具介紹?? ?3 2.2 JAVA技術(shù)介紹?? ?3 2.3 MYSQL數(shù)據(jù)庫(kù)介紹?? ?4 第三章 ?系統(tǒng)需求分析?? ?6 3.1可行性分析?? ?6 3.1.1技術(shù)可

    2023年04月08日
    瀏覽(23)
  • java+springboot+mysql校園跑腿管理系統(tǒng)

    java+springboot+mysql校園跑腿管理系統(tǒng)

    項(xiàng)目介紹: 使用java+springboot+mysql開發(fā)的校園跑腿管理系統(tǒng),系統(tǒng)包含超級(jí)管理員,系統(tǒng)管理員、用戶角色,功能如下: 超級(jí)管理員:管理員管理;用戶管理(充值);任務(wù)類型;任務(wù)管理;訂單管理;充值管理;留言反饋;公告管理;修改個(gè)人信息;修改密碼; 管理員:和

    2024年02月10日
    瀏覽(25)
  • 32基于java的小區(qū)物業(yè)管理系統(tǒng)或智慧社區(qū)管理系統(tǒng)

    32基于java的小區(qū)物業(yè)管理系統(tǒng)或智慧社區(qū)管理系統(tǒng)

    本章節(jié)給大家介紹一個(gè)基于java的小區(qū)物業(yè)管理系統(tǒng)或智慧社區(qū)管理系統(tǒng),可用于小區(qū)物業(yè)的管理系統(tǒng),或者智慧社區(qū)的管理系統(tǒng)。 隨著科學(xué)技術(shù)的飛速發(fā)展,計(jì)算機(jī)技術(shù)已延伸倒我們?nèi)粘I畹母鱾€(gè)方面。在工業(yè)、農(nóng)業(yè)、商業(yè)等方面起著巨大的作用。計(jì)算機(jī)已成為我們?nèi)粘?/p>

    2024年02月03日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包