【无标题】智慧校园管理系统-毕设项目(包含数据库)
目錄
- 1、 項目簡介
- 1.1、 簡介
- 1.2、 項目模塊
- 1.3 使用的技術
- 2、 項目環境搭建
- 2.1、使用IDEA的SpringBoot創建一個Maven項目
- 2.2 pom.xml 導入依賴
- 2.3、準備目錄結構
- 2.5、準備分頁插件的配置類
- 2.6、準備 swagger2 的配置類
- 準備 util 下的工具類
- 2.7.1、驗證碼圖片工具類
- 2.7.2、token口令生成工具 JwtHelper
- 2.7.3、解析request請求中的 token口令的工具AuthContextHolder
- 2.7.4、MD5加密工具類
- 2.7.5、響應結果類型碼枚舉
- 2.7.6、JSON響應結果格式封裝類
- 2.7.7、文件上傳工具類
- 2.8、創建數據表及數據
- 2.9、根據數據表準備pojo、mapper、controller、service及其實現類
- 3、測試訪問首頁的問題:數據庫版本不一致
1、 項目簡介
1.1、 簡介
智慧校園管理系統:主要是以年級、班級為單位,進行老師和學生信息記錄和統計功能。項目采用前后端分離架構思想,前端采用 HTML+CSS+VUE來實現頁面效果展示,后端采用 SpringBoot+MybatisPlus 框架實現數據存儲等服務。存儲層使用高性能的 MySQL,服務器使用 SpringBoot 內置的Tomcat9.x,項目構建工具使用Maven來管理jar包和項目構建。
1.2、 項目模塊
1.3 使用的技術
2、 項目環境搭建
2.1、使用IDEA的SpringBoot創建一個Maven項目
設置好包名及存放的位置即可,無需添加其他功能,后面會對Pom.xml進行修改,其他功能可以通過maven即可。
2.2 pom.xml 導入依賴
為了避免影響其他插件的使用,需要使用較低的 SpringBoot 的版本
由于我的數據庫是 mysql5.7,導入的依賴也應該是 5.x 版本的
<?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><!-- 繼承方式使用SpringBoot --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/></parent><groupId>com.zyj</groupId><artifactId>myzhxy</artifactId><version>0.0.1-SNAPSHOT</version><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><!--單元測試啟動器--><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><!-- 簡化POJO實體類開發 --><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>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></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 增強版接口文檔--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.4</version></dependency><!--開發者工具--><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><!--spring boot maven插件 , 可以將項目運行依賴的jar包打到我們的項目中--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>2.3、準備目錄結構
1、java目錄下
config : 項目的配置類controller: 控制層mapper : 持久層接口pojo : 實體類service: 服務層util: 工具類包2、resources目錄下
mapper :持久層映射文件public/upload:文件上傳目錄static: 靜態資源目錄application.yml :SpringBoot核心配置文件## 2.4、配置application.yaml文件
server:port: 8080 #指定當前項目啟動的端口號 spring:#解決SpringBoot2.6.0與swagger沖突問題【原因是在springboot2.6.0中將SpringMVC 默認路徑匹配策略從AntPathMatcher 更改為PathPatternParser,導致出錯,解決辦法是切換回原先的AntPathMatcher】mvc:pathmatch:matching-strategy: ant_path_matcher#配置數據源datasource:#配置數據源類型type: com.zaxxer.hikari.HikariDataSource#配置數據庫連接屬性driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/zhxy_db?characterEncoding=utf-8&useSSL=false #&serverTimezone=GMT%2B8username: rootpassword: zyj123hikari:connection-test-query: SELECT 1connection-timeout: 60000idle-timeout: 500000max-lifetime: 540000maximum-pool-size: 12minimum-idle: 10pool-name: GuliHikariPoolthymeleaf:#模板的模式,支持 HTML, XML TEXT JAVASCRIPTmode: HTML5#編碼 可不用配置encoding: UTF-8#開發配置為false,避免修改模板還要重啟服務器cache: false#配置模板路徑,默認是templates,可以不用配置prefix: classpath:/static/jackson:# 時間格式date-format: yyyy-MM-dd HH:mm:ss# 時區time-zone: GMT+8servlet:#設置文件上傳上限multipart:# 單個文件最大大小max-file-size: 10MB# 多個文件總共最大大小max-request-size: 100MB mybatis-plus:configuration:#添加日志支持log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: classpath*:/mapper/**/*.xml2.5、準備分頁插件的配置類
@Configuration @MapperScan("com.zyj.myzhxy.mapper") public class MyConfig {@Beanpublic PaginationInterceptor paginationInterceptor(){PaginationInterceptor paginationInterceptor = new PaginationInterceptor();return paginationInterceptor;}}2.6、準備 swagger2 的配置類
若想查看,需訪問 localhost:端口號/swagger-ui.html
只有有 Api 相關的注解才會生成
@Api 標注在類上,示例:@Api(tags = “年級控制器”)
@ApiOperation 標注在方法上,示例:@ApiOperation(“(批量)刪除年級信息”)
@ApiParam 標注在方法參數上,示例:@ApiParam(“要刪除的年級信息的id的JSON集合”) @RequestBody List ids
import com.google.common.base.Predicates; import io.swagger.annotations.ApiOperation; 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.PathSelectors; 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 {@Beanpublic Docket webApiConfig(){//添加head參數startList<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("臨時用戶ID").defaultValue("1").modelRef(new ModelRef("string")).parameterType("header").required(false).build();pars.add(tmpPar.build());//添加head參數endreturn new Docket(DocumentationType.SWAGGER_2).groupName("webApi").apiInfo(webApiInfo()).select()//可以測試請求頭中:輸入token// 有 ApiOperation 注解才生成//.apis(RequestHandlerSelectors.withClassAnnotation(ApiOperation.class))// 掃描的基礎包.apis(RequestHandlerSelectors.basePackage("com.zyj.myzhxy.controller"))//過濾掉admin路徑下的所有頁面//.paths(Predicates.and(PathSelectors.regex("/sms/.*")))//過濾掉所有error或error.*頁面//.paths(Predicates.not(PathSelectors.regex("/error.*"))).build().globalOperationParameters(pars);}private ApiInfo webApiInfo(){return new ApiInfoBuilder().title("網站-API文檔").description("本文檔描述了網站微服務接口定義").version("1.0").contact(new Contact("atguigu", "http://atguigu.com", "512111559@qq.com")).build();}private ApiInfo adminApiInfo(){return new ApiInfoBuilder().title("后臺管理系統-API文檔").description("本文檔描述了后臺管理系統微服務接口定義").version("1.0").contact(new Contact("atguigu", "http://atguigu.com", "512111559@qq.com")).build();}}準備 util 下的工具類
2.7.1、驗證碼圖片工具類
import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random;/*** @project: ssm_sms* @description: 繪制驗證碼圖片*/ public class CreateVerifiCodeImage {private static int WIDTH = 90;private static int HEIGHT = 35;private static int FONT_SIZE = 20; //字符大小private static char[] verifiCode; //驗證碼private static BufferedImage verifiCodeImage; //驗證碼圖片/*** @description: 獲取驗證碼圖片* @param: no* @return: java.awt.image.BufferedImage*/public static BufferedImage getVerifiCodeImage() {verifiCodeImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_BGR);// create a imageGraphics graphics = verifiCodeImage.getGraphics();verifiCode = generateCheckCode();drawBackground(graphics);drawRands(graphics, verifiCode);graphics.dispose();return verifiCodeImage;}/*** @description: 獲取驗證碼* @param: no* @return: char[]*/public static char[] getVerifiCode() {return verifiCode;}/*** @description: 隨機生成驗證碼* @param: no* @return: char[]*/private static char[] generateCheckCode() {String chars = "0123456789abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ";char[] rands = new char[4];for (int i = 0; i < 4; i++) {int rand = (int) (Math.random() * (10 + 26 * 2));rands[i] = chars.charAt(rand);}return rands;}/*** @description: 繪制驗證碼* @param: g* @param: rands* @return: void*/private static void drawRands(Graphics g, char[] rands) {g.setFont(new Font("Console", Font.BOLD, FONT_SIZE));for (int i = 0; i < rands.length; i++) {g.setColor(getRandomColor());g.drawString("" + rands[i], i * FONT_SIZE + 10, 25);}}/*** @description: 繪制驗證碼圖片背景* @param: g* @return: void*/private static void drawBackground(Graphics g) {g.setColor(Color.white);g.fillRect(0, 0, WIDTH, HEIGHT);// 繪制驗證碼干擾點for (int i = 0; i < 200; i++) {int x = (int) (Math.random() * WIDTH);int y = (int) (Math.random() * HEIGHT);g.setColor(getRandomColor());g.drawOval(x, y, 1, 1);}}/*** @description: 獲取隨機顏色* @param: no* @return: java.awt.Color*/private static Color getRandomColor() {Random ran = new Random();return new Color(ran.nextInt(220), ran.nextInt(220), ran.nextInt(220));} }2.7.2、token口令生成工具 JwtHelper
package com.zyj.myzhxy.util;import io.jsonwebtoken.*; import org.springframework.util.StringUtils;import java.util.Date;public class JwtHelper {// 一天的毫秒數private static long tokenExpiration = 24*60*60*1000;// 后綴信息,用于增加保密性private static String tokenSignKey = "123456";//生成token字符串(根據tokenExpiration和tokenSignKey)public static String createToken(Long userId, Integer userType) {String token = Jwts.builder().setSubject("YYGH-USER").setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)).claim("userId", userId) // .claim("userName", userName).claim("userType", userType).signWith(SignatureAlgorithm.HS512, tokenSignKey).compressWith(CompressionCodecs.GZIP).compact();return token;}//從token字符串獲取useridpublic static Long getUserId(String token) {if(StringUtils.isEmpty(token)) return null;Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims = claimsJws.getBody();Integer userId = (Integer)claims.get("userId");return userId.longValue();}//從token字符串獲取userTypepublic static Integer getUserType(String token) {if(StringUtils.isEmpty(token)) return null;Jws<Claims> claimsJws= Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims = claimsJws.getBody();return (Integer)(claims.get("userType"));}//從token字符串獲取userNamepublic static String getUserName(String token) {if(StringUtils.isEmpty(token)) return "";Jws<Claims> claimsJws= Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims = claimsJws.getBody();return (String)claims.get("userName");}//判斷token是否有效public static boolean isExpiration(String token){try {boolean isExpire = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody().getExpiration().before(new Date());//沒有過期,有效,返回falsereturn isExpire;}catch(Exception e) {//過期出現異常,返回truereturn true;}}/*** 刷新Token* @param token* @return*/public String refreshToken(String token) {String refreshedToken;try {final Claims claims = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody();refreshedToken = JwtHelper.createToken(getUserId(token), getUserType(token));} catch (Exception e) {refreshedToken = null;}return refreshedToken;}public static void main(String[] args) { // String token = JwtHelper.createToken(1L, "lucy"); // System.out.println(token); // System.out.println(JwtHelper.getUserId(token)); // System.out.println(JwtHelper.getUserName(token));} }2.7.3、解析request請求中的 token口令的工具AuthContextHolder
import javax.servlet.http.HttpServletRequest;public class AuthContextHolder {//從請求頭token獲取useridpublic static Long getUserIdToken(HttpServletRequest request) {//從請求頭tokenString token = request.getHeader("token");//調用工具類Long userId = JwtHelper.getUserId(token);return userId;}//從請求頭token獲取namepublic static String getUserName(HttpServletRequest request) {//從header獲取tokenString token = request.getHeader("token");//jwt從token獲取usernameString userName = JwtHelper.getUserName(token);return userName;} }2.7.4、MD5加密工具類
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public final class MD5 {/*** 將明文轉為密文* @param strSrc 明文* @return 密文*/public static String encrypt(String strSrc) {try {char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'a', 'b', 'c', 'd', 'e', 'f' };byte[] bytes = strSrc.getBytes();MessageDigest md = MessageDigest.getInstance("MD5");md.update(bytes);bytes = md.digest();int j = bytes.length;char[] chars = new char[j * 2];int k = 0;for (int i = 0; i < bytes.length; i++) {byte b = bytes[i];chars[k++] = hexChars[b >>> 4 & 0xf];chars[k++] = hexChars[b & 0xf];}return new String(chars);} catch (NoSuchAlgorithmException e) {e.printStackTrace();throw new RuntimeException("MD5加密出錯!!+" + e);}}}2.7.5、響應結果類型碼枚舉
import lombok.Getter;/*** 統一返回結果狀態信息類**/ @Getter public enum ResultCodeEnum {SUCCESS(200,"成功"),FAIL(201, "失敗"),SERVICE_ERROR(2012, "服務異常"),ILLEGAL_REQUEST( 204, "非法請求"),PAY_RUN(205, "支付中"),ARGUMENT_VALID_ERROR(206, "參數校驗錯誤"),LOGIN_ERROR(207, "用戶名或密碼錯誤"),LOGIN_AUTH(208, "未登陸"),PERMISSION(209, "沒有權限"),SECKILL_NO_START(210, "秒殺還沒開始"),SECKILL_RUN(211, "正在排隊中"),SECKILL_NO_PAY_ORDER(212, "您有未支付的訂單"),SECKILL_FINISH(213, "已售罄"),SECKILL_END(214, "秒殺已結束"),SECKILL_SUCCESS(215, "搶單成功"),SECKILL_FAIL(216, "搶單失敗"),SECKILL_ILLEGAL(217, "請求不合法"),SECKILL_ORDER_SUCCESS(218, "下單成功"),COUPON_GET(220, "優惠券已經領取"),COUPON_LIMIT_GET(221, "優惠券已發放完畢"),//2022-02-22LOGIN_CODE(222,"長時間未操作,會話已失效,請刷新頁面后重試!"),CODE_ERROR(223,"驗證碼錯誤!"),TOKEN_ERROR(224,"Token無效!");private Integer code;private String message;private ResultCodeEnum(Integer code, String message) {this.code = code;this.message = message;} }2.7.6、JSON響應結果格式封裝類
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data;/*** 全局統一返回結果類**/ @Data @ApiModel(value = "全局統一返回結果") public class Result<T> {@ApiModelProperty(value = "返回碼")private Integer code;@ApiModelProperty(value = "返回消息")private String message;@ApiModelProperty(value = "返回數據")private T data;public Result(){}// 返回數據protected static <T> Result<T> build(T data) {Result<T> result = new Result<T>();if (data != null)result.setData(data);return result;}public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {Result<T> result = build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}public static<T> Result<T> ok(){return Result.ok(null);}/*** 操作成功* @param data* @param <T>* @return*/public static<T> Result<T> ok(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.SUCCESS);}public static<T> Result<T> fail(){return Result.fail(null);}/*** 操作失敗* @param data* @param <T>* @return*/public static<T> Result<T> fail(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.FAIL);}public Result<T> message(String msg){this.setMessage(msg);return this;}public Result<T> code(Integer code){this.setCode(code);return this;}public boolean isOk() {if(this.getCode().intValue() == ResultCodeEnum.SUCCESS.getCode().intValue()) {return true;}return false;} }2.7.7、文件上傳工具類
import org.apache.commons.io.filefilter.SuffixFileFilter; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.UUID;/*** @project: zhxy* @description: 上傳文件的工具類*/ public class UploadFile {//存儲文件上傳失敗的錯誤信息private static Map<String, Object> error_result = new HashMap<>();//存儲頭像的上傳結果信息private static Map<String, Object> upload_result = new HashMap<>();/*** @description: 效驗所上傳圖片的大小及格式等信息...* @param: photo* @param: path* @return: java.util.Map<java.lang.String, java.lang.Object>*/private static Map<String, Object> uploadPhoto(MultipartFile photo, String path) {//限制頭像大小(20M)int MAX_SIZE = 20971520;//獲取圖片的原始名稱String orginalName = photo.getOriginalFilename();//如果保存文件的路徑不存在,則創建該目錄File filePath = new File(path);if (!filePath.exists()) {filePath.mkdirs();}//限制上傳文件的大小if (photo.getSize() > MAX_SIZE) {error_result.put("success", false);error_result.put("msg", "上傳的圖片大小不能超過20M喲!");return error_result;}// 限制上傳的文件類型String[] suffixs = new String[]{".png", ".PNG", ".jpg", ".JPG", ".jpeg", ".JPEG", ".gif", ".GIF", ".bmp", ".BMP"};SuffixFileFilter suffixFileFilter = new SuffixFileFilter(suffixs);if (!suffixFileFilter.accept(new File(path + orginalName))) {error_result.put("success", false);error_result.put("msg", "禁止上傳此類型文件! 請上傳圖片喲!");return error_result;}return null;}/*** @description: (提取公共代碼 : 提高代碼的可重用性)獲取頭像的上傳結果信息* @param: photo* @param: dirPaht* @param: portraitPath* @return: java.util.Map<java.lang.String, java.lang.Object>*/public static Map<String, Object> getUploadResult(MultipartFile photo, String dirPaht, String portraitPath) {if (!photo.isEmpty() && photo.getSize() > 0) {//獲取圖片的原始名稱String orginalName = photo.getOriginalFilename();//上傳圖片,error_result:存儲頭像上傳失敗的錯誤信息Map<String, Object> error_result = UploadFile.uploadPhoto(photo, dirPaht);if (error_result != null) {return error_result;}//使用UUID重命名圖片名稱(uuid__原始圖片名稱)String newPhotoName = UUID.randomUUID() + "__" + orginalName;//將上傳的文件保存到目標目錄下try {photo.transferTo(new File(dirPaht + newPhotoName));upload_result.put("success", true);upload_result.put("portrait_path", portraitPath + newPhotoName);//將存儲頭像的項目路徑返回給頁面} catch (IOException e) {e.printStackTrace();upload_result.put("success", false);upload_result.put("msg", "上傳文件失敗! 服務器端發生異常!");return upload_result;}} else {upload_result.put("success", false);upload_result.put("msg", "頭像上傳失敗! 未找到指定圖片!");}return upload_result;} }2.8、創建數據表及數據
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for tb_admin -- ---------------------------- DROP TABLE IF EXISTS `tb_admin`; CREATE TABLE `tb_admin` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gender` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`email` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`telephone` VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`address` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`portrait_path` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE ) ENGINE = INNODB AUTO_INCREMENT = 157 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ---------------------------- -- Records of tb_admin -- ---------------------------- INSERT INTO `tb_admin` VALUES (101, 'admin', '女', '21232f297a57a5a743894a0e4a801fc3', '111111@qq.com', '13260161111', '昌平', 'upload/default.jpg'); INSERT INTO `tb_admin` VALUES (102, 'admin1', '男', '21232f297a57a5a743894a0e4a801fc3', '512111559@qq.com', '13260166090', '北京', 'upload/default.jpg'); INSERT INTO `tb_admin` VALUES (103, 'admin2', '男', '21232f297a57a5a743894a0e4a801fc3', '512111559@qq.com', '13260166090', '北京', 'upload/default.jpg'); INSERT INTO `tb_admin` VALUES (104, 'admin3', '男', '21232f297a57a5a743894a0e4a801fc3', '123456@qq.com', '13666666666', '宏福苑', 'upload/default.jpg');-- ---------------------------- -- Table structure for tb_clazz -- ---------------------------- DROP TABLE IF EXISTS `tb_clazz`; CREATE TABLE `tb_clazz` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`number` INT(3) NULL DEFAULT NULL,`introducation` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`headmaster` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`email` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`telephone` VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`grade_name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE ) ENGINE = INNODB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ---------------------------- -- Records of tb_clazz -- ---------------------------- INSERT INTO `tb_clazz` VALUES (1, '一年一班', 30, '大圣的一年一班好', '大圣', 'dasheng@163.com', '13260166090', '一年級'); INSERT INTO `tb_clazz` VALUES (2, '一年二班', 28, '小張的一年二班好', '小張', 'xiaozhang@163.com', '13260166090', '一年級'); INSERT INTO `tb_clazz` VALUES (3, '二年一班', 35, '小韓的二年一班好', '小韓', 'xiaohan@163.com', '13260166090', '二年級'); INSERT INTO `tb_clazz` VALUES (4, '二年二班', 30, '小強的二年二班好', '小強', 'xiaoqiang@163.com', '13260166090', '二年級'); INSERT INTO `tb_clazz` VALUES (5, '三年一班', 30, '小花的三年一班好', '小花', 'xiaohua@163.com', '13260166090', '三年級'); INSERT INTO `tb_clazz` VALUES (6, '三年二班', 30, '小趙的三年二班好', '小趙', 'xiaozhao@163.com', '13260166090', '三年級'); INSERT INTO `tb_clazz` VALUES (7, '四年一班', 30, '小趙的三年二班好', '小飛', 'xiaofei@163.com', '13260166090', '四年級');-- ---------------------------- -- Table structure for tb_grade -- ---------------------------- DROP TABLE IF EXISTS `tb_grade`; CREATE TABLE `tb_grade` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',`manager` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`email` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`telephone` VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`introducation` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`, `name`) USING BTREE ) ENGINE = INNODB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ---------------------------- -- Records of tb_grade -- ---------------------------- INSERT INTO `tb_grade` VALUES (1, '一年級', '大圣', 'dasheng@163.com', '13260166090', '大學一年級'); INSERT INTO `tb_grade` VALUES (2, '二年級', '小魏', 'xiaowei@163.com', '13260166090', '大學二年級'); INSERT INTO `tb_grade` VALUES (3, '三年級', '小李', 'xiaoli@163.com', '13666666666', '三年級,這個班級的孩子們很有才藝'); INSERT INTO `tb_grade` VALUES (4, '五年級', '小麗', 'li@123.com', '13666666666', '這個年級的同學多才多活力'); INSERT INTO `tb_grade` VALUES (5, '六年級', '小明', 'xiaoming@666.com', '13666666666', '這個年級的主任是小明');-- ---------------------------- -- Table structure for tb_student -- ---------------------------- DROP TABLE IF EXISTS `tb_student`; CREATE TABLE `tb_student` (`id` INT(11) NOT NULL AUTO_INCREMENT,`sno` VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gender` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`email` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`telephone` VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`address` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`introducation` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`portrait_path` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`clazz_name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE ) ENGINE = INNODB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ---------------------------- -- Records of tb_student -- ---------------------------- INSERT INTO `tb_student` VALUES (1, '1001', '張小明', '男', 'e10adc3949ba59abbe56e057f20f883e', 'yinyufei@163.com', '13260166090', '北京天通苑', '這個學生學習好', 'upload/default.jpg', '一年一班'); INSERT INTO `tb_student` VALUES (2, '1002', '郭建超', '男', 'e10adc3949ba59abbe56e057f20f883e', 'guojianchao@163.com', '13260166090', '北京昌平', '這個學生會功夫', 'upload/default.jpg', '一年一班'); INSERT INTO `tb_student` VALUES (3, '1003', '史汶鑫', '男', 'e10adc3949ba59abbe56e057f20f883e', 'shiwenxin@163.com', '13260166090', '北京昌平', '這個學生酒量好', 'upload/default.jpg', '二年一班'); INSERT INTO `tb_student` VALUES (4, '1004', '高建軍', '男', 'e10adc3949ba59abbe56e057f20f883e', 'gaojianjun@163.com', '13260166090', '北京昌平', '這個學生會做飯', 'upload/default.jpg', '二年一班'); INSERT INTO `tb_student` VALUES (5, '1005', '鄒偉斌', '男', 'e10adc3949ba59abbe56e057f20f883e', 'zouweibin@163.com', '13260166090', '北京昌平', '這個學生能吃辣', 'upload/default.jpg', '三年一班'); INSERT INTO `tb_student` VALUES (6, '1006', '劉路', '男', 'e10adc3949ba59abbe56e057f20f883e', 'liulu@163.com', '13260166090', '北京昌平', '這個學生是學霸', 'upload/default.jpg', '三年二班'); INSERT INTO `tb_student` VALUES (7, '1007', '龐家仨', '女', 'e10adc3949ba59abbe56e057f20f883e', 'pangjiasan@163.com', '13260166090', '北京昌平', '這個學生海拔高', 'upload/default.jpg', '三年二班'); INSERT INTO `tb_student` VALUES (8, '1008', '譚帥', '男', 'e10adc3949ba59abbe56e057f20f883e', 'tanshuai@163.com', '13260166090', '北京昌平', '這個學生想考研', 'upload/default.jpg', '四年一班');-- ---------------------------- -- Table structure for tb_teacher -- ---------------------------- DROP TABLE IF EXISTS `tb_teacher`; CREATE TABLE `tb_teacher` (`id` INT(11) NOT NULL AUTO_INCREMENT,`tno` VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gender` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`email` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`telephone` VARCHAR(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`address` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`portrait_path` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`clazz_name` VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE ) ENGINE = INNODB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ---------------------------- -- Records of tb_teacher -- ---------------------------- INSERT INTO `tb_teacher` VALUES (1, '101', '大圣', '女', '123456', 'dasheng@163.com', '13260166090', '北京昌平', 'upload/default.jpg', '一年一班'); INSERT INTO `tb_teacher` VALUES (2, '102', '小張', '男', 'e10adc3949ba59abbe56e057f20f883e', 'xiaozhang@163.com', '13260166090', '北京海淀', 'upload/default.jpg', '一年二班'); INSERT INTO `tb_teacher` VALUES (3, '103', '小韓', '男', 'e10adc3949ba59abbe56e057f20f883e', 'xiaohan@163.com', '13260166090', '北京朝陽', 'upload/default.jpg', '二年一班'); INSERT INTO `tb_teacher` VALUES (4, '104', '小強', '男', 'e10adc3949ba59abbe56e057f20f883e', 'xiaoqiang@163.com', '13260166090', '北京通州', 'upload/default.jpg', '二年二班'); INSERT INTO `tb_teacher` VALUES (5, '105', '小花', '男', 'e10adc3949ba59abbe56e057f20f883e', 'xiaohua@163.com', '13260166090', '北京順義', 'upload/default.jpg', '三年一班'); INSERT INTO `tb_teacher` VALUES (6, '106', '小趙', '男', 'e10adc3949ba59abbe56e057f20f883e', 'xiaozhao@163.com', '13260166090', '北京東城', 'upload/default.jpg', '三年二班'); INSERT INTO `tb_teacher` VALUES (7, '107', '小飛', '男', 'e10adc3949ba59abbe56e057f20f883e', 'xiaofei@163.com', '13260166090', '北京西城', 'upload/default.jpg', '四年一班'); INSERT INTO `tb_teacher` VALUES (8, '108', '秀秀', '女', 'e10adc3949ba59abbe56e057f20f883e', '123456@123.com', '13855555555', '海淀', 'upload/12fe07bf8b6d493b96294f1ef0552339default.jpg', '一年一班');SET FOREIGN_KEY_CHECKS = 1;2.9、根據數據表準備pojo、mapper、controller、service及其實現類
@Data @AllArgsConstructor @NoArgsConstructor @TableName("tb_admin") public class Admin {@TableId(value = "id", type = IdType.AUTO)private Integer id;private String name;private Character gender;private String password;private String email;private String telephone;private String address;private String portraitPath; // 頭像圖片路徑 } @Mapper public interface AdminMapper extends BaseMapper<Admin> { } public interface AdminService extends IService<Admin> { } @Service("adminServiceImpl") @Transactional public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService { }3、測試訪問首頁的問題:數據庫版本不一致
完成以上搭建后,應該可以實現對首頁的訪問,但我這里失敗了。后來發現是因為數據庫版本的不一致的問題。
由于我的 MySQL 版本為 5.7,這里需要在 pom.xml 中更改導入的數據庫驅動版本
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency>application.yaml 中數據庫的配置也要與 5.7 版本的格式對應
driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/zhxy_db?characterEncoding=utf-8&useSSL=false #&serverTimezone=GMT%2B8username: rootpassword: 123456總結
以上是生活随笔為你收集整理的【无标题】智慧校园管理系统-毕设项目(包含数据库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis Cluster集群
- 下一篇: 疫情推动下的云联络中心终于引起了销售行业