做网上夫妻去哪个网站,wordpress谷歌网站地图,wordpress建电商网站,北京开发办网站系列文章目录
智能化校园#xff1a;深入探讨云端管理系统设计与实现#xff08;一#xff09; 文章目录 系列文章目录功能开发登录功能分析验证码功能实现登录校验功能登录后跳转功能 系统管理器实现验证码响应图片功能实现异步图片上传头像功能实现全局修改密码功能实现 …系列文章目录
智能化校园深入探讨云端管理系统设计与实现一 文章目录 系列文章目录功能开发登录功能分析验证码功能实现登录校验功能登录后跳转功能 系统管理器实现验证码响应图片功能实现异步图片上传头像功能实现全局修改密码功能实现 管理员管理功能实现查询管理员信息添加和修改管理员信息删除和批量删除管理员信息 年级管理功能实现查询年级信息添加和修改年级信息删除和批量删除年级信息 班级管理功能实现搜索条件中的年级选项查询班级信息添加和修改班级信息删除和批量删除班级信息 教师管理功能实现搜索条件中班级选项查询教师功能实现添加和修改教师信息删除和批量删除教师信息 学生管理功能实现搜索条件中班级选项查询学生功能实现添加和修改学生信息删除和批量删除学生信息 项目bug解决 项目总结 功能开发 登录功能分析
输入用户账户和密码验证码然后进行登录校验通过登录校验后跳转至首页功能。与此同时该系统所有用户都必须登录后才能跳转到后台首页所以登录功能在全局系统控制器的代码中实现。
验证码功能实现
验证码的前端请求请求的是后端方法getVerifiCodeImage该方法中先获取请求和响应的参数获取从工具类中创建的图片获取图片上的验证码文本将验证码图片响应给浏览器。
ApiOperation(获取验证码方法)GetMapping(/getVerifiCodeImage)public void getVerifiCodeImage(ApiParam(请求) HttpServletRequest request,ApiParam(响应) HttpServletResponse response){//获取图片BufferedImage verifiCodeImage CreateVerifiCodeImage.getVerifiCodeImage();//获取图片上的验证码String verifiCodenew String(CreateVerifiCodeImage.getVerifiCode());//将验证码文本放入session 域为下一次验证做准备HttpSession sessionrequest.getSession();session.setAttribute(verifiCode,verifiCode);/** 将验证码图片响应到浏览器 response输出流* 将生成的验证码图片按照PNG格式传给浏览器。* */try {ServletOutputStream outputStream response.getOutputStream();ImageIO.write(verifiCodeImage,PNG,outputStream);} catch (IOException e) {e.printStackTrace();}}登录校验功能
登录校验功能首先需要判断用户输入的验证码和系统图片的验证码文本是否一致如若不一致则会提示验证码有误请刷新后重试。如若判断一致后会先将现有session中移除现有验证码在进行用户类型验证管理员学生老师。在这里采用map类型进行用户响应数据的存放将传入的用户类型分为三种1代表管理员2代表学生3 代表老师。以管理员用户为例将传入的对象在数据库进行查询如果查询找到了则为admin对象。如果没有找到则admin对象为null那么说明用户名或者密码错误。 /** 登录校验* */ApiOperation(登录的方法)PostMapping(/login)//传入两个参数一个是系统的验证码图片一个是用户输入的验证码public Result login(ApiParam(登录提交的表单)RequestBody LoginForm loginForm,HttpServletRequest request){//验证码HttpSession sessionrequest.getSession();String sessionVerifiCode(String) session.getAttribute(verifiCode);String loginVerifiCodeloginForm.getVerifiCode();//验证码判断,是否失效或者为空if (.equals(sessionVerifiCode ) || nullsessionVerifiCode){return Result.fail().message(验证码失效请刷新后重试);}//判断用户输入验证码和系统验证码是否相同不区分大小写if (!sessionVerifiCode.equalsIgnoreCase(loginVerifiCode)){return Result.fail().message(验证码有误请输入后重试);}//从session移除现有验证码session.removeAttribute(verifiCode);//分用户类型验证 管理员学生老师等//准备一个map用户存放响应的数据MapString,Object mapnew LinkedHashMap();switch (loginForm.getUserType()){//管理员表case 1:try {//传入的对象判断登录数据库中查询找到为admin如果为null,即没有找到。Admin admin adminService.login(loginForm);if (null !admin){//用户的id 和类型转换为一个密文以token形式的名称反馈前端String token JwtHelper.createToken(admin.getId().longValue(),1);map.put(token,token);}else {throw new RuntimeException(用户名或者密码有误);}return Result.ok(map);}catch (RuntimeException e){e.printStackTrace();//异常对象抛出来的信息 new RuntimeException(用户名或者密码有误);return Result.fail().message(e.getMessage());}//学生信息case 2:try {Student student studentService.login(loginForm);if (null !student){String tokenJwtHelper.createToken(student.getId().longValue(),2);map.put(token,token);}else {throw new RuntimeException(用户名或者密码错误);}return Result.ok(map);}catch (RuntimeException e){e.printStackTrace();return Result.fail().message(e.getMessage());}case 3:try {Teacher teacher teacherService.login(loginForm);if (null !teacher){String tokenJwtHelper.createToken(teacher.getId().longValue(),3);map.put(token,token);}else {throw new RuntimeException(用户名或者密码错误);}return Result.ok(map);}catch (RuntimeException e){e.printStackTrace();return Result.fail().message(e.getMessage());}}return Result.fail().message(查无此人);}登录后跳转功能
在登录过程中先请求login再次请求getinfo 来判断登录页面。请求login页面响应码200信息成功data对象用户id类型token有效时间 生成密文 第二次请求在login请求成功后会请求访问getinfo页面第二次请求中也带有一个token。请求信息头响应admin 的数据信息源码
Api(tags 系统控制器)
RestController
RequestMapping(/sms/system)
public class SystemController {Autowiredprivate AdminService adService;Autowiredprivate StudentService studentService;Autowiredprivate TeacherService teacherService;/** token 判断登录* */ApiOperation(通过taken口令来获取当前登录的用户信息的方法)GetMapping(/getInfo)public Result getInfoByToken(//请求头 tokenApiParam(token口令) RequestHeader(token) String token){boolean expirationJwtHelper.isExpiration(token);//验证token是否过期。if (expiration){//token无效return Result.build(null, ResultCodeEnum.TOKEN_ERROR);}//从token解析出 用户id用户类型Long userIdJwtHelper.getUserId(token);Integer userTypeJwtHelper.getUserType(token);//判断登录状态MapString,Object mapnew LinkedHashMap();//用户类型switch (userType){case 1://根据adminid查询一个对象键值对Admin adminadminService.getAdminById(userId);map.put(userType,1);map.put(user,admin);break;case 2:Student studentstudentService.getStudentById(userId);map.put(userType,2);map.put(user,student);break;case 3:Teacher teacherteacherService.getByTeacherById(userId);map.put(userType,3);map.put(user,teacher);break;}return Result.ok(map);}}这段代码同时可以优化为以下代码后续不少代码给出的是优化后或有一定变动后的代码
Api(tags 系统控制器)
RestController
RequestMapping(/sms/system)
public class SystemController {private static final int ADMIN_USER_TYPE 1;private static final int STUDENT_USER_TYPE 2;private static final int TEACHER_USER_TYPE 3;private final AdminService adService;private final StudentService studentService;private final TeacherService teacherService;Autowiredpublic SystemController(AdminService adService, StudentService studentService, TeacherService teacherService) {this.adService adService;this.studentService studentService;this.teacherService teacherService;}/** token 判断登录* */ApiOperation(通过taken口令来获取当前登录的用户信息的方法)GetMapping(/getInfo)public Result getInfoByToken(//请求头 tokenApiParam(token口令) RequestHeader(token) String token){boolean isTokenExpiredJwtHelper.isExpiration(token);//验证token是否过期。if (isTokenExpired){//token无效return Result.build(null, ResultCodeEnum.TOKEN_ERROR);}//从token解析出 用户id用户类型Long userIdJwtHelper.getUserId(token);Integer userTypeJwtHelper.getUserType(token);//判断登录状态MapString,Object mapnew LinkedHashMap();//用户类型if (userType ADMIN_USER_TYPE) {// 处理管理员用户逻辑Admin adminadminService.getAdminById(userId);map.put(userType,1);map.put(user,admin);break;} else if (userType STUDENT_USER_TYPE) {// 处理学生用户逻辑Student studentstudentService.getStudentById(userId);map.put(userType,2);map.put(user,student);break;} else if (userType TEACHER_USER_TYPE) {// 处理教师用户逻辑Teacher teacherteacherService.getByTeacherById(userId);map.put(userType,3);map.put(user,teacher);break;} else {// 处理其他用户类型逻辑return Result.ok(map);}}系统管理器实现 验证码响应图片功能实现
验证码图片请求Controller层代码
/** 响应验证码图片的流程* 匹配处理器方法路径* */ApiOperation(获取验证码方法)GetMapping(/getVerifiCodeImage)public void getVerifiCodeImage(ApiParam(请求) HttpServletRequest request,ApiParam(响应) HttpServletResponse response){//获取图片BufferedImage verifiCodeImage CreateVerifiCodeImage.getVerifiCodeImage();//获取图片上的验证码String verifiCodenew String(CreateVerifiCodeImage.getVerifiCode());//将验证码文本放入session 域为下一次验证做准备HttpSession sessionrequest.getSession();session.setAttribute(verifiCode,verifiCode);/** 将验证码图片响应到浏览器 response输出流* 将生成的验证码图片按照PNG格式传给浏览器。* */try {ServletOutputStream outputStream response.getOutputStream();ImageIO.write(verifiCodeImage,PNG,outputStream);} catch (IOException e) {e.printStackTrace();}}响应验证码图片swagger测试接口
异步图片上传头像功能实现
该操作响应流程Controller层代码
ApiOperation(文件上传统一入口)
PostMapping(/headerImgUpload)
public Result headerImgUpload(ApiParam(头像文件) RequestParam(file) MultipartFile file,HttpServletRequest request
) {if (file.isEmpty()) {return Result.error(文件为空);}String uuid UUID.randomUUID().toString().replace(-, ).toLowerCase();String originalFilename file.getOriginalFilename();String fileExtension originalFilename.substring(originalFilename.lastIndexOf(.));String newFileName uuid fileExtension;String uploadDirectory D:/ideaProjects/smart_campus/target/classes/public/upload/;String portraitPath uploadDirectory newFileName;try {Files.createDirectories(Paths.get(uploadDirectory));file.transferTo(new File(portraitPath));} catch (IOException e) {e.printStackTrace();return Result.error(文件上传失败);}String path upload/ newFileName;return Result.ok(path);
}该操作响应成功swagger测试接口
全局修改密码功能实现
Controller层代码
ApiOperation(全局密码更新器)
PostMapping(/updatePwd/{oldPwd}/{newPwd})
public Result updatePwd(ApiParam(token口令) RequestHeader(token) String token,ApiParam(旧密码) PathVariable(oldPwd) String oldPwd,ApiParam(新密码) PathVariable(newPwd) String newPwd
) {boolean expiration JwtHelper.isExpiration(token);if (expiration) {// token 过期return Result.fail().message(token过期请重新登录);}// 获取用户id和用户类型Long userId JwtHelper.getUserId(token);Integer userType JwtHelper.getUserType(token);// 定义用户实体类和服务类BaseUser user null;BaseServiceBaseUser userService null;// 根据用户类型选择对应的实体类和服务类switch (userType) {case 1:user adminService.getById(userId);userService adminService;break;case 2:user studentService.getById(userId);userService studentService;break;case 3:user teacherService.getById(userId);userService teacherService;break;}// 验证用户和密码if (user ! null user.getPassword().equals(MD5.encrypt(oldPwd))) {// 修改密码user.setPassword(MD5.encrypt(newPwd));userService.saveOrUpdate(user);return Result.ok().message(密码修改成功);} else {return Result.fail().message(原密码有误);}
}swagger测试接口
管理员管理功能实现
进入管理员管理界面 查询管理员信息
先看查询数据流的请求信息根据请求路径到后端请求地址Controller层代码
Autowired
private AdminService adminService;/*
* /sms/adminController/getAllAdmin/1/3
* 分页查询
* */ApiOperation(分页查询功能)
GetMapping(/getAllAdmin/{pageNo}/{pageSize})
public Result getAllAdmin(ApiParam(页码) PathVariable(pageNo) Integer pageNo,ApiParam(页大小) PathVariable(pageSize) Integer pageSize,ApiParam(管理员名字) String adminName
){PageAdmin page new Page(pageNo, pageSize);IPageAdmin iPage adminService.getAdminsByOpr(page, adminName);return Result.ok(iPage);
}
service层代码
Override
public IPageAdmin getAdminsByOpr(PageAdmin page, String adminName) {QueryWrapperAdmin queryWrapper new QueryWrapper();if (!StringUtils.isEmpty(adminName)) {queryWrapper.like(name, adminName);}queryWrapper.orderByDesc(id);return baseMapper.selectPage(page, queryWrapper);
}
该请求响应为swagger测试接口 添加和修改管理员信息
弹出添加表单填写相关信息。数据流请求地址
Controller层代码
ApiOperation(增加或者修改管理员信息)
PostMapping(/saveOrUpdateAdmin)
public Result saveOrUpdateAdmin(ApiParam(JSON格式的Admin对象) RequestBody Admin admin) {if (admin.getId() null || admin.getId() 0) {admin.setPassword(MD5.encrypt(admin.getPassword()));}adminService.saveOrUpdate(admin);return Result.ok();
} 在这里区分一下增加和修改操作。 admin 对象的 id 是否为 null 或者为 0。如果是则表示这是一个新增的管理员需要对密码进行加密处理。如果 id 不为 null 或者不为 0则表示这是一个修改操作不需要对密码进行处理。 请求响应头swagger测试接口
删除和批量删除管理员信息
删除操作请求数据流Controller层代码
ApiOperation(删除单个用户或者批量删除多个用户)
DeleteMapping(/deleteAdmin)
public Result deleteAdmin(ApiParam(删除管理员用户的id的JSON集合) RequestBody ListInteger ids) {if (ids.size() 1) {// 单一删除逻辑adminService.removeById(ids.get(0));} else {// 批量删除逻辑adminService.removeByIds(ids);}return Result.ok();
}通过判断ids列表的长度来区分是单一删除还是批量删除 如果长度为1则执行单一删除逻辑调用adminService.removeById(ids.get(0))方法删除对应的管理员用户 如果长度大于1则执行批量删除逻辑调用adminService.removeByIds(ids)方法删除对应的管理员用户。 该请求响应操作swagger测试接口 年级管理功能实现 查询年级信息
先查询数据流的请求信息
根据请求路径到后端请求地址
Controller层代码
Api(tags 年级控制器)
RestController
RequestMapping(/sms/gradeController)
public class GradeController {private final GradeService gradeService;public GradeController(GradeService gradeService) {this.gradeService gradeService;}ApiOperation(查询年级信息分页带条件)GetMapping(/getGrades)public Result getGrades(ApiParam(分页查询页码数) RequestParam(value pageNo, defaultValue 1) Integer pageNo,ApiParam(分页查询页大小) RequestParam(value pageSize, defaultValue 10) Integer pageSize,ApiParam(分页查询模糊匹配班级名) RequestParam(value gradeName, required false) String gradeName) {PageGrade page new Page(pageNo, pageSize);IPageGrade pageRs gradeService.getGradeByOpr(page, gradeName);return Result.ok(pageRs);}
}Service层代码
Service
Transactional
public class GradeServiceImpl extends ServiceImplGradeMapper, Grade implements GradeService {private final GradeMapper gradeMapper;public GradeServiceImpl(GradeMapper gradeMapper) {this.gradeMapper gradeMapper;}Overridepublic IPageGrade getGradeByOpr(PageGrade pageParam, String gradeName) {// 设置查询条件QueryWrapperGrade queryWrapper new QueryWrapper();if (!StringUtils.isEmpty(gradeName)) {queryWrapper.like(name, gradeName);}// 设置排序规则queryWrapper.orderByDesc(id);queryWrapper.orderByAsc(name);// 分页查询数据IPageGrade page gradeMapper.selectPage(pageParam, queryWrapper);return page;}
}该请求响应头
swagger测试接口功能 添加和修改年级信息
添加年级表单填入数据。
数据流的请求头
Controller层代码
Api(tags 年级控制器)
RestController
RequestMapping(/sms/gradeController)
public class GradeController {private final GradeService gradeService;Autowiredpublic GradeController(GradeService gradeService) {this.gradeService gradeService;}ApiOperation(添加或者修改年级信息)PostMapping(/saveOrUpdateGrade)public Result saveOrUpdateGrade(ApiParam(JSON的grade对象转换后台数据模型) RequestBody Grade grade) {// 调用服务层方法实现添加或者修改年级信息gradeService.saveOrUpdate(grade);return Result.ok();}
}
swagger测试接口 删除和批量删除年级信息
删除操作请求数据流Controller层代码
private final GradeService gradeService;public GradeController(GradeService gradeService) {this.gradeService gradeService;
}ApiOperation(删除一个或者多个grade信息)
DeleteMapping(/deleteGrade)
public Result deleteGradeById(ApiParam(JSON的年级id集合,映射为后台ListInteger) RequestBody ListInteger ids
) {gradeService.removeByIds(ids);return Result.ok();
}请求后的响应
swagger测试接口 班级管理功能实现 搜索条件中的年级选项 Controller层代码
Api(tags 年级控制器)
RestController
RequestMapping(/sms/gradeController)
public class GradeController {Autowiredprivate GradeService gradeService;ApiOperation(获取所有Grade信息)GetMapping(/getGrades)public Result getGrades(){ListGrade grades gradeService.getGrades();return Result.ok(grades);}
}service层代码
Service
Transactional
public class GradeServiceImpl extends ServiceImplGradeMapper, Grade implements GradeService {public ListGrade getGrades(){ListGrade grades baseMapper.selectList(null);return grades;}
}mapper层代码
public interface BaseMapperT extends MapperT{ListT selectList(Param(ew) WrapperT queryWrapper);
}swagger测试接口 查询班级信息
先看查询数据流的请求信息
根据请求路径到后端请求地址
Controller层代码
Api(tags 班级控制器)
RestController
RequestMapping(/sms/clazzController)
public class ClazzController {Autowiredprivate ClazzService clazzService;ApiOperation(查询班级信息,分页带条件)GetMapping(/getClazzsByOpr/{pageNo}/{pageSize})public Result getClazzsByOpr(ApiParam(页码数) PathVariable(pageNo) Integer pageNo,ApiParam(页大小) PathVariable(pageSize) Integer pageSize,ApiParam(查询条件) Clazz clazz){//设置分页信息PageClazz page new Page(pageNo,pageSize);IPageClazz iPage clazzService.getClazzsByOpr(page, clazz);return Result.ok(iPage);}}service层代码
Service
Transactional
public class ClazzServiceImpl extends ServiceImplClazzMapper, Clazz implements ClazzService {/*** 分页查询所有班级信息【带条件】* param clazz* return*/Overridepublic IPageClazz getClazzsByOpr(PageClazz pageParam,Clazz clazz) {QueryWrapper queryWrapper new QueryWrapper();if(clazz ! null){//年级名称条件String gradeName clazz.getGradeName();if(!StringUtils.isEmpty(gradeName)){queryWrapper.eq(grade_name,gradeName);}//班级名称条件String clazzName clazz.getName();if(!StringUtils.isEmpty(clazzName)){queryWrapper.like(name,clazzName);}queryWrapper.orderByDesc(id);queryWrapper.orderByAsc(name);}Page page baseMapper.selectPage(pageParam, queryWrapper);return page;}
}该请求响应头
swagger测试接口 添加和修改班级信息
填写表单添加数据
该数据流请求头Controller层代码
Api(tags 班级控制器)
RestController
RequestMapping(/sms/clazzController)
public class ClazzController {Autowiredprivate ClazzService clazzService;ApiOperation(保存或者修改班级信息)PostMapping(/saveOrUpdateClazz)public Result saveOrUpdateClazz(ApiParam(JSON转换后端Clazz数据模型) RequestBody Clazz clazz){clazzService.saveOrUpdate(clazz);return Result.ok();}
}请求响应后增加修改swagger测试接口
删除和批量删除班级信息
删除响应Controller层代码
public class ClazzController {
private final ClazzService clazzService;public ClazzController(ClazzService clazzService) {this.clazzService clazzService;
}ApiOperation(删除一个或者多个班级信息)
DeleteMapping(/deleteClazz)
public Result deleteClazzByIds(ApiParam(多个班级id的JSON) RequestBody ListInteger ids
){clazzService.removeByIds(ids);return Result.ok();}
}请求响应后swagger测试接口 教师管理功能实现 搜索条件中班级选项 Controller层代码
//查询所有班级信息ApiOperation(查询所有班级的信息)GetMapping(/getClazzs)public Result getClazzs(){ListClazz clazzesclazzService.getClazzs();return Result.ok(clazzes);}service层代码
Service(clazzServiceImpl)
Transactional //事务控制
public class ClazzServiceImpl extends ServiceImplClazzMapper, Clazz implements ClazzService {Overridepublic ListClazz getClazzs() {return baseMapper.selectList(null);}}swagger测试接口
查询教师功能实现
先查询数据流的请求信息根据请求路径到后端请求地址Controller层代码
Api(tags 教师信息管理控制器)
RestController
RequestMapping(/sms/teacherController)
public class TeacherController {Autowiredprivate TeacherService teacherService;ApiOperation(获取教师信息,分页带条件)GetMapping(/getTeachers/{pageNo}/{pageSize})public Result getTeachers(PathVariable(pageNo) Integer pageNo,PathVariable(pageSize) Integer pageSize,Teacher teacher){PageTeacher pageParam new Page(pageNo,pageSize);IPageTeacher page teacherService.getTeachersByOpr(pageParam, teacher);return Result.ok(page);}
}service层代码
Override
public IPageTeacher getTeachersByOpr(PageTeacher pageParam, Teacher teacher) {QueryWrapper queryWrapper new QueryWrapper();if(teacher ! null){//班级名称条件String clazzName teacher.getClazzName();if (!StringUtils.isEmpty(clazzName)) {queryWrapper.eq(clazz_name,clazzName);}//教师名称条件String teacherName teacher.getName();if(!StringUtils.isEmpty(teacherName)){queryWrapper.like(name,teacherName);}queryWrapper.orderByDesc(id);queryWrapper.orderByAsc(name);}IPageTeacher page baseMapper.selectPage(pageParam, queryWrapper);return page;
}该请求响应为swagger测试接口
添加和修改教师信息
填写表单数据该操作请求数据响应头Controller层代码
ApiOperation(添加和修改教师信息)
PostMapping(/saveOrUpdateTeacher)
public Result saveOrUpdateTeacher(RequestBody Teacher teacher
){if (teacher.getId() ! null) {// ID 不为空执行修改操作teacherService.update(teacher);} else {// ID 为空执行增加操作teacherService.add(teacher);}return Result.ok();
}通过判断teacher对象的id属性是否为空来确定是执行增加操作还是修改操作。如果id不为空则执行修改操作如果id为空则执行增加操作。 swagger测试接口
删除和批量删除教师信息
该删除操作请求路径Controller层代码
ApiOperation(删除一个或者多个教师信息)
DeleteMapping(/deleteTeacher)
public Result deleteTeacher(RequestBody ListInteger ids
){if (ids.size() 1) {// ids 列表只包含一个元素执行删除操作teacherService.removeById(ids.get(0));} else {// ids 列表包含多个元素执行批量删除操作teacherService.removeByIds(ids);}return Result.ok();
}通过判断ids列表的大小来确定是执行删除操作还是批量删除操作。如果ids列表只包含一个元素则执行删除操作如果ids列表包含多个元素则执行批量删除操作。 swagger测试接口
学生管理功能实现 搜索条件中班级选项 Controller层代码
//查询所有班级信息ApiOperation(查询所有班级的信息)GetMapping(/getClazzs)public Result getClazzs(){ListClazz clazzesclazzService.getClazzs();return Result.ok(clazzes);}service层代码
Service(clazzServiceImpl)
Transactional //事务控制
public class ClazzServiceImpl extends ServiceImplClazzMapper, Clazz implements ClazzService {Overridepublic ListClazz getClazzs() {return baseMapper.selectList(null);}}swagger测试接口 查询学生功能实现
先查询数据流的请求信息Controller层代码 Api(tags 学生控制器)
RestController
RequestMapping(/sms/studentController)
public class StudentController {Autowiredprivate StudentService studentService;ApiOperation(查询学生信息,分页带条件)GetMapping(/getStudentByOpr/{pageNo}/{pageSize})public Result getStudentsByOpr(ApiParam(页码数) PathVariable(pageNo)Integer pageNo,ApiParam(页大小) PathVariable(pageSize)Integer pageSize,ApiParam(查询条件转换后端数据模型) Student student){// 准备分页信息封装的page对象PageStudent page new Page(pageNo,pageSize);// 获取分页的学生信息IPageStudent iPage studentService.getStudentByOpr(page, student);// 返回学生信息return Result.ok(iPage);}
}service层代码
Service(stuService)
Transactional
public class StudentServiceImpl extends ServiceImplStudentMapper, Student implements StudentService {/*** 按条件查询学生信息【带分页】*/public IPageStudent getStudentByOpr(PageStudent pageParam,Student student){QueryWrapperStudent 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.orderByDesc(id);queryWrapper.orderByAsc(name);} //创建分页对象IPageStudent pages baseMapper.selectPage(pageParam, queryWrapper);return pages;}请求响应swagger测试接口
添加和修改学生信息
填写表单数据该操作数据请求Controller层代码
Api(tags 学生控制器)
RestController
RequestMapping(/sms/studentController)
public class StudentController {Autowiredprivate StudentService studentService;ApiOperation(增加学生信息)PostMapping(/addOrUpdateStudent)public Result addOrUpdateStudent(RequestBody Student student){//对学生的密码进行加密if (!Strings.isEmpty(student.getPassword())) {student.setPassword(MD5.encrypt(student.getPassword()));}//保存学生信息进入数据库studentService.saveOrUpdate(student);return Result.ok();}
}根据学生对象是否具有唯一标识如学生ID来进行判断。如果学生对象具有唯一标识则可以将其视为修改操作否则可以将其视为增加操作。 该操作响应swagger测试接口
删除和批量删除学生信息
该操作请求路径Controller层代码
Api(tags 学生控制器)
RestController
RequestMapping(/sms/studentController)
public class StudentController {Autowiredprivate StudentService studentService;ApiOperation(删除一个或者多个学生信息)DeleteMapping(/delStudentById)public Result delStudentById(ApiParam(多个学生id的JSON) RequestBody ListInteger ids){studentService.removeByIds(ids);return Result.ok();}
}该请求响应数据swagger测试接口
项目bug解决
项目启动报错“javax.xml.bind.DatatypeConverter”项目启动时没有问题swagger调接口也没有问题前后端联调的时候出现以下问题提示javax.xml.bind.DatatypeConverterJAXB API是java EE 的API因此在java SE 9.0 中不再包含这个 Jar 包。java 9 中引入了模块的概念默认情况下Java SE中将不再包含java EE 的Jar包而在 java 6/7 / 8 时关于这个API 都是捆绑在一起的jar包中缺少这一依赖-javax.xml.bind.api导入依赖即可。
dependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.0/version
/dependency项目总结
智慧校园云端管理系统是一个基于前后端分离架构的校园管理系统主要用于管理校内学生、老师、班级和年级的相关信息并提供学生和老师信息记录和统计的功能。该系统采用了以下技术和工具
前端技术HTML、CSS和Vue.js用于实现页面效果展示和交互功能。后端框架Spring Boot和MyBatis Plus用于实现数据存储和服务。数据库MySQL作为存储层提供高性能的数据存储和查询。服务器使用Spring Boot内置的Tomcat 9.x作为Web服务器用于部署和运行系统。项目构建工具Maven用于管理项目依赖和构建过程。
系统的用户角色包括管理员、老师和学生。每个角色都有不同的功能和权限
管理员角色可以进行学生、老师、年级和班级信息的管理包括添加、编辑和删除操作还可以管理个人信息和重置账户密码。老师角色可以参与相关学生和班级信息的管理包括查看和编辑操作同时也可以管理个人信息。学生角色可以查看自己所在班级的信息、同学信息还可以管理个人信息。
通过该系统管理员可以方便地管理校园的核心基础业务数据老师和学生可以更好地进行信息管理和查看。至此项目成功完结。