尚硅谷智慧校园 —— 1、简介及环境搭建
學習尚硅谷智慧校園項目,視頻地址:https://www.bilibili.com/video/BV1AY4y1v7Xe?p=1
博客中圖片來源于:尚硅谷智慧校園 —— 1、簡介及環境搭建_Mr_zhangyj的博客-CSDN博客https://blog.csdn.net/Mr_zhangyj/article/details/124228757
目錄
1.2、項目模塊
1.3、使用的技術
2、環境搭建
2.1、使用 IDEA的 SpringBoot 創建一個Maven項目
2.2、在 pom.xml 導入依賴
2.3、準備目錄結構
2.4、配置?application.yaml
2.5、準備分頁插件的配置類
2.6、準備 swagger2 的配置類
2.7、準備 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及其實現類
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.27版本,根據不同版本導入不同版本的依賴
<?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>cn.xs</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><!-- lombok插件簡化實體類開發 --><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、準備目錄結構
java目錄下
config : 項目的配置類
controller: 控制層
mapper : 持久層接口
pojo : 實體類
service: 服務層
util: 工具類包
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:3308/atguigu_zhxy_db?characterEncoding=utf-8&useSSL=falseusername: rootpassword: roothikari: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("cn.xs.myzhxy.mapper") public class Myconfig {/** 分頁插件* */public PaginationInterceptor paginationInterceptor(){PaginationInterceptor paginationInterceptor = new PaginationInterceptor();//paginationInterceptor.setlimit(你的最大單頁限制數量,默認500,小于0 eg:-1不受限制);return paginationInterceptor;} }2.6、準備 swagger2 的配置類
訪問 localhost:端口號/swagger-ui.html,即可查看接口文檔
只有有 ?Api 相關的注解才會生成
@Api 標注在類上,示例:@Api(tags = "年級控制器")
@ApiOperation 標注在方法上,示例:@ApiOperation("(批量)刪除年級信息")
@ApiParam 標注在方法參數上,示例:@ApiParam("要刪除的年級信息的id的JSON集合")
@RequestBody List<Integer> ids
(部分內容可自定義修改,固定模板)
@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("cn.xs.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("xiaoshuang", "http://xiaoshuang.com", "s1791584877@163.com")).build();}private ApiInfo adminApiInfo(){return new ApiInfoBuilder().title("后臺管理系統-API文檔").description("本文檔描述了后臺管理系統微服務接口定義").version("1.0").contact(new Contact("xiaoshuang", "http://xiaoshuang.com", "s1791584877@163.com")).build();}}2.7、準備 util 下的工具類
package cn.xs.myzhxy.util(包下)
2.7.1、驗證碼圖片工具類
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
public class JwtHelper {private static long tokenExpiration = 24 * 60 * 60 * 1000;private static String tokenSignKey = "123456";//生成token字符串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
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加密工具類
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、響應結果類型碼枚舉
@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, "優惠券已發放完畢"),LOGIN_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響應結果格式封裝類
@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、文件上傳工具類
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及其實現類
這里展示admin,其他操作一樣
@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 { } @RestController @RequestMapping("/sms/adminController") public class AdminController { }完成以上搭建后,應該可以實現對首頁的訪問
總結
以上是生活随笔為你收集整理的尚硅谷智慧校园 —— 1、简介及环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php大写数字转换,php如何实现数字金
- 下一篇: 工单系统(源代码)PHP语言开发 开发者