在线教育系统项目之教师信息业务

举报
tea_year 发表于 2025/09/18 10:58:36 2025/09/18
【摘要】 教师新增功能创建教师信息表SQLCREATE TABLE teacher (id int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',username varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',password varchar(255) COLLATE utf...

教师新增功能

创建教师信息表

SQL
CREATE TABLE teacher (
id int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
username varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',
password varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',
name varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
sex varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '性别',
title varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '职称',
speciality_id int(10) DEFAULT NULL COMMENT '专业ID',
role varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色',
avatar varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='教师信息';

entity

TypeScript
package com.example.entity;

@Data
public class Teacher extends Account{
// 职称
private String title;
// 所属专业ID
private Integer specialityId;
// 性别
private Character sex;

}

前端

修改Manager.vue,在管理员信息下面添加教师信息

代码

XML
<el-menu-item index="/teacher"><el-icon><Avatar /></el-icon><span>教师信息</span></el-menu-item>

在views/manager下面添加Teacher.vue

[Teacher.vue]

添加teacher路由

修改router目录下的index.js

代码

TypeScript
{ path: 'teacher', component: () => import('@/views/manager/Teacher.vue')},

后端

TeacherController

Java
package com.example.controller;

import com.example.common.Result;
import com.example.entity.Teacher;
import com.example.service.TeacherService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
* 教师模块前端请求的接口入口
*/
@RestController
@RequestMapping("/teacher")
public class TeacherController {
@Resource
private TeacherService teacherService;

/**
* 新增
*/
@PostMapping("/add")
public Result add(@RequestBody Teacher teacher) {
teacherService.add(teacher);
return Result.success();
}

}

TeacherService

TypeScript
package com.example.service;

import com.example.entity.Teacher;

public interface TeacherService {
void add(Teacher teacher);
}

TeacherServiceImpl

Java
package com.example.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.example.entity.Teacher;
import com.example.exception.CustomException;
import com.example.mapper.TeacherMapper;
import com.example.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class TeacherServiceImpl implements TeacherService {
@Autowired
private TeacherMapper teacherMapper;
@Override
public void add(Teacher teacher) {
// 账号唯一验证
Teacher dbTeacher = teacherMapper.selectByUsername(teacher.getUsername());
if (ObjectUtil.isNotEmpty(dbTeacher)) {
throw new CustomException("用户名已存在");
}
// 密码为空时,默认密码为123456
if (ObjectUtil.isEmpty(teacher.getPassword())) {
teacher.setPassword("123456");
}
// 设置角色
teacher.setRole("TEACHER");
teacherMapper.insert(teacher);
}
}

TeacherMapper

Java
package com.example.mapper;

import com.example.entity.Teacher;
import org.apache.ibatis.annotations.Select;

public interface TeacherMapper {
void insert(Teacher teacher);

@Select("select * from teacher where username = #{username}")
Teacher selectByUsername(String username);
}

TeacherMapper.xml

XML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.TeacherMapper">

<insert id="insert" parameterType="com.example.entity.Teacher" useGeneratedKeys="true">
insert into teacher (username, password, name, avatar, role, sex, title, speciality_id)
values (#{username}, #{password}, #{name}, #{avatar}, #{role}, #{sex}, #{title}, #{specialityId})
</insert>

</mapper>


教师信息的分页查询和条件查询

创建专业表speciality

由于展示教师信息的时候要展示专业信息,所以要进行连表查询,把专业表先做出来

SQL
CREATE TABLE `speciality` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '专业名称',
`college_id` int NULL DEFAULT NULL COMMENT '学院ID',
PRIMARY KEY (`id`) USING BTREE
);

修改实体类Teacher

由于页面要展示专业名称,所以添加specialityName字段

TypeScript
//专业名称
private String specialityName;

TeacherController

TypeScript
/**
* 分页查询
*/
@GetMapping("/selectPage")
public Result selectPage(Teacher teacher,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize) {
PageInfo<Teacher> pageInfo = teacherService.selectPage(teacher, pageNum, pageSize);
return Result.success(pageInfo);
}

TeacherServiceImpl

TypeScript
@Override
public PageInfo<Teacher> selectPage(Teacher teacher, Integer pageNum, Integer pageSize) {
List<Teacher> teacherList = new ArrayList<>();
//分页插件使用
PageHelper.startPage(pageNum, pageSize);
if (ObjectUtil.isNotEmpty(teacher.getName())){
teacherList = teacherMapper.selectByName(teacher.getName());
}else {
teacherList = teacherMapper.selectAll();
}
return PageInfo.of(teacherList);
}

TeacherMapper

Python
@Select("select teacher.*, speciality.name as specialityName from teacher " +
"left join speciality on teacher.speciality_id = speciality.id " +
"where teacher.name like concat('%', #{name}, '%')")
List<Teacher> selectByName(String name);

@Select("SELECT t.*,s.`name` specialityName FROM teacher t LEFT JOIN speciality s ON t.speciality_id=s.id")
List<Teacher> selectAll();

教师信息的更新功能

TeacherController

TypeScript
@PutMapping("/update")
public Result update(@RequestBody Teacher teacher) {
teacherService.updateById(teacher);
return Result.success();
}

TeacherServiceImpl

TypeScript
@Override
public void update(Teacher teacher) {
//新增的时候判断账号的唯一性
//1.通过ID获取原teacher,然后判断当前的账号是否和原账号一致
Teacher dbTeacher = teacherMapper.selectById(teacher.getId());
//原账号
String oldUsername = dbTeacher.getUsername();
//新账号
String newUsername = teacher.getUsername();
if (!oldUsername.equals(newUsername)){
Teacher myteacher = teacherMapper.selectByUsername(teacher.getUsername());
if (ObjectUtil.isNotNull(myteacher)){
throw new CustomException("用户名已存在");
}
}
teacherMapper.updateById(teacher);
}

TeacherMapper

TypeScript
@Select("select * from teacher where id=#{id}")
Teacher selectById(Integer id);

@Update("update teacher set username = #{username}, password = #{password}, name = #{name}, avatar = #{avatar}, role = #{role}, " +
"sex = #{sex}, title = #{title}, speciality_id = #{specialityId} where id = #{id}")
void updateById(Teacher teacher);

教师信息的删除功能

TeacherController

TypeScript
@DeleteMapping("/deleteById/{id}")
public Result deleteById(@PathVariable Integer id) {
teacherService.deleteById(id);
return Result.success();
}

TeacherServiceImpl

TypeScript
@Override
public void deleteById(Integer id) {
teacherMapper.deleteById(id);
}

TeacherMapper

TypeScript
@Delete("delete from teacher where id = #{id}")
void deleteById(Integer id);


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。