本篇博客将讲述基于SSM框架的学生信息管理系统的具体实现。
GitHub项目地址:https://github.com/qiuxinfa/stuInfoManagerSys
一、项目结构
二、配置文件
三、具体代码实现
下面将以学生管理模块和成绩管理模块为例,说明如何让这个系统运行起来,其他模块,大家可以模仿着写,要自己思考了,才会有进步。
1. pojo类
学生类:Student:
package com.qxf.pojo;
/**
* 学生类
* @author Administrator
*
*/
public class Student {
private String id;
private String name;
private Integer sex;
private Integer age;
private String phone;
private String clazzId;
private String majorId;
private String instituteId;
public Student() {
}
public Student(String id, String name, Integer sex, Integer age, String phone, String clazzId, String majorId,
String instituteId) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.phone = phone;
this.clazzId = clazzId;
this.majorId = majorId;
this.instituteId = instituteId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getClazzId() {
return clazzId;
}
public void setClazzId(String clazzId) {
this.clazzId = clazzId;
}
public String getMajorId() {
return majorId;
}
public void setMajorId(String majorId) {
this.majorId = majorId;
}
public String getInstituteId() {
return instituteId;
}
public void setInstituteId(String instituteId) {
this.instituteId = instituteId;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", phone=" + phone
+ ", clazzId=" + clazzId + ", majorId=" + majorId + ", instituteId=" + instituteId + "]";
}
}
成绩类:Grade
package com.qxf.pojo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 成绩表
* @author Administrator
*
*/
public class Grade {
private String id;
private String studentId;
private String courseId;
private String teacherId;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date examTime;
private Integer examType;
private double score;
public Grade() {
}
public Grade(String id, String studentId, String courseId, String teacherId, Date examTime, Integer examType,
double score) {
this.id = id;
this.studentId = studentId;
this.courseId = courseId;
this.teacherId = teacherId;
this.examTime = examTime;
this.examType = examType;
this.score = score;
}
public String getTeacherId() {
return teacherId;
}
public void setTeacherId(String teacherId) {
this.teacherId = teacherId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getCourseId() {
return courseId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
public Date getExamTime() {
return examTime;
}
public void setExamTime(Date examTime) {
this.examTime = examTime;
}
public Integer getExamType() {
return examType;
}
public void setExamType(Integer examType) {
this.examType = examType;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Grade [id=" + id + ", studentId=" + studentId + ", courseId=" + courseId + ", teacherId=" + teacherId
+ ", examTime=" + examTime + ", examType=" + examType + ", score=" + score + "]";
}
}
2.mapper
StudentMapper.java
package com.qxf.mapper;
import java.util.List;
import com.qxf.pojo.Clazz;
import com.qxf.pojo.Institute;
import com.qxf.pojo.Major;
import com.qxf.pojo.Student;
public interface StudentMapper {
/**
* 查找全部学生
* @return
*/
public List<Student> findAllStudent(Student student);
/**
* 根据学号查找学生
* @param sid
* @return
*/
public Student findStudentById(String id);
/**
* 根据姓名模糊查找学生
* @param name
* @return
*/
public Student findStudentByName(String name);
/**
* 根据学号删除学生
* @param sid
* @return
*/
public Integer deleteStudentById(String id);
/**
* 修改学生信息
* @param student
* @return
*/
public Integer updateStudent(Student student);
/**
* 新增学生
* @param student
* @return
*/
public Integer addStudent(Student student);
/**
* 查找学院列表
* @return
*/
public List<Institute> getInstituteList();
/**
* 查找专业列表
* @return
*/
public List<Major> getMajorList(Major major);
/**
* 查找班级列表
* @return
*/
public List<Clazz> getClazzList(Clazz clazz);
}
StudentMapper.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.qxf.mapper.StudentMapper">
<!-- 查询所有学生信息 -->
<select id="findAllStudent" parameterType="com.qxf.pojo.Student" resultType="com.qxf.pojo.Student">
select s.id,s.name,s.sex,s.age,s.phone,
(select c.name from clazz c where c.id=s.clazz_id) clazzId,
(select c.name from major c where c.id=s.major_id) majorId,
(select c.name from institute c where c.id=s.institute_id) instituteId
from student s
<where>
<if test="id!=null and id!=''">
id= #{id}
</if>
<if test="name!=null and name!=''">
and name= #{name}
</if>
<if test="sex!=null and sex!=''">
and sex= #{sex}
</if>
<if test="age!=null and age!=''">
and age=#{age}
</if>
<if test="phone!=null and phone!=''">
and phone=#{phone}
</if>
<if test="clazzId!=null and clazzId!='' and clazzId!='-1'">
and clazz_id=#{clazzId}
</if>
<if test="majorId!=null and majorId!='' and majorId!='-1'">
and major_id=#{majorId}
</if>
<if test="instituteId!=null and instituteId!='' and instituteId!='-1'">
and institute_id=#{instituteId}
</if>
</where>
</select>
<!-- 根据id查询学生信息 -->
<select id="findStudentById" resultType="com.qxf.pojo.Student" parameterType="string">
select * from student where id=#{id}
</select>
<!-- 根据id查询学生信息 -->
<select id="findStudentByName" resultType="com.qxf.pojo.Student" parameterType="string">
select * from student where name like '%${name}%'
</select>
<!-- 根据学号删除学生 -->
<delete id="deleteStudentById" parameterType="string">
delete from student where id=#{id}
</delete>
<!-- 修改信息 -->
<update id="updateStudent" parameterType="com.qxf.pojo.Student">
update student
<set>
<if test="name!=null and name!=''">
name= #{name}
</if>
<if test="sex!=null and sex!=''">
, sex= #{sex}
</if>
<if test="age!=null and age!=''">
, age= #{age}
</if>
<if test="phone!=null and phone!=''">
, phone=#{phone}
</if>
<if test="clazzId!=null and clazzId!='' and clazzId!='-1'">
, clazz_id=#{clazzId}
</if>
<if test="majorId!=null and majorId!='' and majorId!='-1'">
, major_id=#{majorId}
</if>
<if test="instituteId!=null and instituteId!='' and instituteId!='-1'">
, institute_id=#{instituteId}
</if>
</set>
where id=#{id}
</update>
<!-- 添加学生 -->
<insert id="addStudent" parameterType="com.qxf.pojo.Student">
insert into student(id,name,sex,age,phone,clazz_id,major_id,institute_id)
values(#{id},#{name},#{sex},#{age},#{phone},#{clazzId},#{majorId},#{instituteId})
</insert>
<!-- 查找学院列表 -->
<select id="getInstituteList" resultType="com.qxf.pojo.Institute">
select id,name from institute
</select>
<!-- 查找专业列表 -->
<select id="getMajorList" parameterType="com.qxf.pojo.Major" resultType="com.qxf.pojo.Major">
select id,name from major where 1=1
<if test="instituteId!=null and instituteId!='' and instituteId!='-1'">
and institute_id=#{instituteId}
</if>
</select>
<!-- 查找班级列表 -->
<select id="getClazzList" parameterType="com.qxf.pojo.Clazz" resultType="com.qxf.pojo.Clazz">
select id,name from clazz where 1=1
<if test="majorId!=null and majorId!='' and majorId!='-1'">
and major_id=#{majorId}
</if>
</select>
</mapper>
GradeMapper.java
package com.qxf.mapper;
import java.util.List;
import com.qxf.pojo.CourseTeacher;
import com.qxf.pojo.Grade;
import com.qxf.pojo.Student;
import com.qxf.pojo.StudentCourse;
public interface GradeMapper {
/**
* 查找全部成绩
* @return
*/
public List<Grade> findAllGrade(Grade grade);
/**
* 根据学号查找成绩
* @param sid
* @return
*/
public Grade findGradeById(String id);
/**
* 根据学号删除成绩
* @param sid
* @return
*/
public Integer deleteGradeById(String id);
/**
* 修改成绩信息
* @param grade
* @return
*/
public Integer updateGrade(Grade grade);
/**
* 新增成绩
* @param grade
* @return
*/
public Integer addGrade(Grade grade);
/**
* 查找学生列表
* @return
*/
public List<Student> getStudentList();
/**
* 查找学生-课程列表
* @return
*/
public List<StudentCourse> getStudentCourseList(StudentCourse sc);
/**
* 查找课程-老师列表
* @return
*/
public List<CourseTeacher> getCourseTeacherList(CourseTeacher ct);
/**
* 查找当前数据是否存在中间表StudentCourse
* @param sc
* @return
*/
public StudentCourse findStudentCourseById(StudentCourse sc);
/**
* 将当前数据插入到中间表StudentCourse
* @param sc
* @return
*/
public Integer addStudentCourse(StudentCourse sc);
/**
* 查找当前数据是否存在中间表CourseTeacher
* @param ct
* @return
*/
public CourseTeacher findCourseTeacherById(CourseTeacher ct);
/**
* 将当前数据插入到中间表CourseTeacher
* @param ct
* @return
*/
public Integer addCourseTeacher(CourseTeacher ct);
}
GradeMapper.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.qxf.mapper.GradeMapper">
<!-- 查询所有成绩信息 -->
<select id="findAllGrade" parameterType="com.qxf.pojo.Grade" resultType="com.qxf.pojo.Grade">
select g.id,
(select c.name from student c where c.id=g.student_id) studentId,
(select c.name from course c where c.id=g.course_id) courseId,
(select c.name from teacher c where c.id=g.teacher_id) teacherId,
DATE_FORMAT(g.exam_time,'%Y-%m-%d') examTime,
g.exam_type,
g.score
from grade g
<where>
<if test="id!=null and id!=''">
id= #{id}
</if>
<if test="examTime!=null and examTime!=''">
and g.exam_time= #{examTime}
</if>
<if test="examType!=null and examType!=''">
and exam_type= #{examType}
</if>
<if test="score!=null and score!=''">
and score=#{score}
</if>
<if test="studentId!=null and studentId!='' and studentId!='-1'">
and student_id=#{studentId}
</if>
<if test="courseId!=null and courseId!='' and courseId!='-1'">
and course_id=#{courseId}
</if>
<if test="teacherId!=null and teacherId!='' and teacherId!='-1'">
and teacher_id=#{teacherId}
</if>
</where>
</select>
<!-- 根据id查询成绩信息 -->
<select id="findGradeById" resultType="com.qxf.pojo.Grade" parameterType="string">
select * from grade where id=#{id}
</select>
<!-- 根据学号删除成绩 -->
<delete id="deleteGradeById" parameterType="string">
delete from grade where id=#{id}
</delete>
<!-- 修改信息 -->
<update id="updateGrade" parameterType="com.qxf.pojo.Grade">
update grade
<set>
<if test="examTime!=null and examTime!=''">
exam_time= #{examTime}
</if>
<if test="examType!=null and examType!=''">
,exam_type= #{examType}
</if>
<if test="score!=null and score!=''">
,score=#{score}
</if>
<if test="studentId!=null and studentId!='' and studentId!='-1'">
,student_id=#{studentId}
</if>
<if test="courseId!=null and courseId!='' and courseId!='-1'">
,course_id=#{courseId}
</if>
<if test="teacherId!=null and teacherId!='' and teacherId!='-1'">
,teacher_id=#{teacherId}
</if>
</set>
where id=#{id}
</update>
<!-- 添加成绩 -->
<insert id="addGrade" parameterType="com.qxf.pojo.Grade">
insert into grade(id,exam_time,exam_type,score,student_id,course_id,teacher_id)
values(#{id},#{examTime},#{examType},#{score},#{studentId},#{courseId},#{teacherId})
</insert>
<!-- 查找学生列表 -->
<select id="getStudentList" resultType="com.qxf.pojo.Student">
select id,name from student
</select>
<!-- 查找学生-课程列表 -->
<select id="getStudentCourseList" parameterType="com.qxf.pojo.StudentCourse" resultType="com.qxf.pojo.Course">
select c.id,c.name from course c,student_course sc where c.id=sc.course_id
<if test="studentId!=null and studentId!='' and studentId!='-1'">
and sc.student_id=#{studentId}
</if>
</select>
<!-- 查找课程-老师列表 -->
<select id="getCourseTeacherList" parameterType="com.qxf.pojo.CourseTeacher" resultType="com.qxf.pojo.Teacher">
select t.id,t.name from teacher t,course_teacher ct where t.id=ct.teacher_id
<if test="courseId!=null and courseId!='' and courseId!='-1'">
and ct.course_id=#{courseId}
</if>
</select>
<!-- 查找当前数据是否存在中间表StudentCourse -->
<select id="findStudentCourseById" parameterType="com.qxf.pojo.StudentCourse" resultType="com.qxf.pojo.StudentCourse">
select * from student_course
<where>
<if test="studentId!=null and studentId!=''">
and student_id=#{studentId}
</if>
<if test="courseId!=null and courseId!=''">
and course_id=#{courseId}
</if>
</where>
</select>
<!-- 将当前数据插入到中间表StudentCourse -->
<insert id="addStudentCourse" parameterType="com.qxf.pojo.StudentCourse">
insert into student_course(id,student_id,course_id) values (#{id},#{studentId},#{courseId});
</insert>
<!-- 查找当前数据是否存在中间表CourseTeacher -->
<select id="findCourseTeacherById" parameterType="com.qxf.pojo.CourseTeacher" resultType="com.qxf.pojo.CourseTeacher">
select * from course_teacher
<where>
<if test="teacherId!=null and teacherId!=''">
and teacher_id=#{teacherId}
</if>
<if test="courseId!=null and courseId!=''">
and course_id=#{courseId}
</if>
</where>
</select>
<!-- 将当前数据插入到中间表CourseTeacher -->
<insert id="addCourseTeacher" parameterType="com.qxf.pojo.CourseTeacher">
insert into course_teacher(id,course_id,teacher_id) values (#{id},#{courseId},#{teacherId});
</insert>
</mapper>
3.service层
StudentService
package com.qxf.service;
import java.util.List;
import com.qxf.pojo.Clazz;
import com.qxf.pojo.Institute;
import com.qxf.pojo.Major;
import com.qxf.pojo.Student;
public interface StudentService {
/**
* 查找全部学生
* @return
*/
public List<Student> findAllStudent(Student student);
/**
* 根据学号查找学生
* @param sid
* @return
*/
public Student findStudentById(String id);
/**
* 根据姓名模糊查找学生
* @param name
* @return
*/
public Student findStudentByName(String name);
/**
* 根据学号删除学生
* @param sid
* @return
*/
public Integer deleteStudentById(String id);
/**
* 修改学生信息
* @param student
* @return
*/
public Integer updateStudent(Student student);
/**
* 新增学生
* @param student
* @return
*/
public Integer addStudent(Student student);
/**
* 查找学院列表
* @return
*/
public List<Institute> getInstituteList();
/**
* 查找专业列表
* @return
*/
public List<Major> getMajorList(Major major);
/**
* 查找班级列表
* @return
*/
public List<Clazz> getClazzList(Clazz clazz);
}
StudentServiceImpl
package com.qxf.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.qxf.mapper.StudentMapper;
import com.qxf.pojo.Clazz;
import com.qxf.pojo.Institute;
import com.qxf.pojo.Major;
import com.qxf.pojo.Student;
import com.qxf.service.StudentService;
@Service
public class StudentServiceImpl implements StudentService{
@Autowired(required=false)
private StudentMapper studentMapper;
public List<Student> findAllStudent(Student student) {
// TODO Auto-generated method stub
return studentMapper.findAllStudent(student);
}
public Student findStudentById(String id) {
// TODO Auto-generated method stub
return studentMapper.findStudentById(id);
}
public Student findStudentByName(String name) {
// TODO Auto-generated method stub
return studentMapper.findStudentByName(name);
}
public Integer deleteStudentById(String id) {
// TODO Auto-generated method stub
return studentMapper.deleteStudentById(id);
}
public Integer updateStudent(Student student) {
// TODO Auto-generated method stub
return studentMapper.updateStudent(student);
}
public Integer addStudent(Student student) {
// TODO Auto-generated method stub
return studentMapper.addStudent(student);
}
public List<Institute> getInstituteList() {
// TODO Auto-generated method stub
return studentMapper.getInstituteList();
}
public List<Major> getMajorList(Major major) {
// TODO Auto-generated method stub
return studentMapper.getMajorList(major);
}
public List<Clazz> getClazzList(Clazz clazz) {
// TODO Auto-generated method stub
return studentMapper.getClazzList(clazz);
}
}
GradeService
package com.qxf.service;
import java.util.List;
import com.qxf.pojo.CourseTeacher;
import com.qxf.pojo.Grade;
import com.qxf.pojo.Student;
import com.qxf.pojo.StudentCourse;
public interface GradeService {
/**
* 查找全部成绩
* @return
*/
public List<Grade> findAllGrade(Grade grade);
/**
* 根据学号查找成绩
* @param sid
* @return
*/
public Grade findGradeById(String id);
/**
* 根据学号删除成绩
* @param sid
* @return
*/
public Integer deleteGradeById(String id);
/**
* 修改成绩信息
* @param grade
* @return
*/
public Integer updateGrade(Grade grade);
/**
* 新增成绩
* @param grade
* @return
*/
public Integer addGrade(Grade grade);
/**
* 查找学生列表
* @return
*/
public List<Student> getStudentList();
/**
* 查找学生-课程列表
* @return
*/
public List<StudentCourse> getStudentCourseList(StudentCourse sc);
/**
* 查找课程-老师列表
* @return
*/
public List<CourseTeacher> getCourseTeacherList(CourseTeacher ct);
/**
* 查找当前数据是否存在中间表StudentCourse
* @param sc
* @return
*/
public StudentCourse findStudentCourseById(StudentCourse sc);
/**
* 将当前数据插入到中间表StudentCourse
* @param sc
* @return
*/
public Integer addStudentCourse(StudentCourse sc);
/**
* 查找当前数据是否存在中间表CourseTeacher
* @param ct
* @return
*/
public CourseTeacher findCourseTeacherById(CourseTeacher ct);
/**
* 将当前数据插入到中间表CourseTeacher
* @param ct
* @return
*/
public Integer addCourseTeacher(CourseTeacher ct);
}
GradeServiceImpl
package com.qxf.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.qxf.mapper.GradeMapper;
import com.qxf.pojo.CourseTeacher;
import com.qxf.pojo.Grade;
import com.qxf.pojo.Student;
import com.qxf.pojo.StudentCourse;
import com.qxf.service.GradeService;
@Service
public class GradeServiceImpl implements GradeService{
@Autowired
private GradeMapper gradeMapper;
public List<Grade> findAllGrade(Grade grade) {
// TODO Auto-generated method stub
return gradeMapper.findAllGrade(grade);
}
public Grade findGradeById(String id) {
// TODO Auto-generated method stub
return gradeMapper.findGradeById(id);
}
public Integer deleteGradeById(String id) {
// TODO Auto-generated method stub
return gradeMapper.deleteGradeById(id);
}
public Integer updateGrade(Grade grade) {
// TODO Auto-generated method stub
return gradeMapper.updateGrade(grade);
}
public Integer addGrade(Grade grade) {
// TODO Auto-generated method stub
return gradeMapper.addGrade(grade);
}
public List<Student> getStudentList() {
// TODO Auto-generated method stub
return gradeMapper.getStudentList();
}
public List<StudentCourse> getStudentCourseList(StudentCourse sc) {
// TODO Auto-generated method stub
return gradeMapper.getStudentCourseList(sc);
}
public List<CourseTeacher> getCourseTeacherList(CourseTeacher ct) {
// TODO Auto-generated method stub
return gradeMapper.getCourseTeacherList(ct);
}
public StudentCourse findStudentCourseById(StudentCourse sc) {
// TODO Auto-generated method stub
return gradeMapper.findStudentCourseById(sc);
}
public Integer addStudentCourse(StudentCourse sc) {
// TODO Auto-generated method stub
return gradeMapper.addStudentCourse(sc);
}
public CourseTeacher findCourseTeacherById(CourseTeacher ct) {
// TODO Auto-generated method stub
return gradeMapper.findCourseTeacherById(ct);
}
public Integer addCourseTeacher(CourseTeacher ct) {
// TODO Auto-generated method stub
return gradeMapper.addCourseTeacher(ct);
}
}
4.controller层
StudentController
package com.qxf.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.qxf.pojo.Clazz;
import com.qxf.pojo.Institute;
import com.qxf.pojo.Major;
import com.qxf.pojo.Student;
import com.qxf.service.StudentService;
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
/**
* 格式化前台传过来的日期类型
* @param binder
*/
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
/**
* 查找学院列表
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/findInstituteList")
public String findInstituteList(Model model) {
//学院下拉列表
List<Institute> instituteList = studentService.getInstituteList();
String jsonString = JSON.toJSONString(instituteList);
return jsonString;
}
/**
* 查找专业列表
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/findMajorList")
public String findMajorList(Major major) {
//专业下拉列表
List<Major> majorList = studentService.getMajorList(major);
String jsonString = JSON.toJSONString(majorList);
return jsonString;
}
/**
* 查找班级列表
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/findClazzList")
public String findClazzList(Clazz clazz) {
//班级下拉列表
List<Clazz> clazzList = studentService.getClazzList(clazz);
String jsonString = JSON.toJSONString(clazzList);
return jsonString;
}
/**
* 查找全部学生
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/findAllStudent")
public String findAllStudent(Model model, Student student) {
System.out.println("查找条件--->"+student);
List<Student> list = studentService.findAllStudent(student);
String jsonString = JSON.toJSONString(list);
return jsonString;
}
/**
* 根据id查询学生
* @param sid
* @return
*/
//ajax查询数据
@ResponseBody
@RequestMapping("/findStudentById")
public Student findStudentById(@RequestParam("id") String id) {
System.out.println("查找学号--->"+id);
return studentService.findStudentById(id);
}
/**
* 根据姓名模糊查找学生
* @param name
* @return
*/
@ResponseBody
@RequestMapping("/findStudentByName")
public Student findStudentByName(@RequestParam("name") String name) {
return studentService.findStudentByName(name);
}
@ResponseBody
@RequestMapping("/deleteStudentById")
public String deleteStudentById(String id) {
Integer flag = studentService.deleteStudentById(id);
if(flag>0) {
return JSON.toJSONString("删除成功!");
}else {
return JSON.toJSONString("删除失败!");
}
}
@ResponseBody
@RequestMapping("/updateStudent")
public String updateStudent(Student student) {
Integer flag = studentService.updateStudent(student);
String msg = "";
if(flag>0) {
msg = "修改成功";
}else {
msg = "修改失败";
}
return JSON.toJSONString(msg);
}
@ResponseBody
@RequestMapping("/addStudent")
public String addStudent(Student student) {
String id = UUID.randomUUID().toString().replace("-", "");
student.setId(id);
Integer flag = studentService.addStudent(student);
String msg = "";
if(flag>0) {
msg = "添加成功";
}else {
msg = "添加失败";
}
return JSON.toJSONString(msg);
}
}
GradeController
package com.qxf.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.qxf.pojo.CourseTeacher;
import com.qxf.pojo.Student;
import com.qxf.pojo.StudentCourse;
import com.qxf.pojo.Grade;
import com.qxf.service.GradeService;
@Controller
public class GradeController {
@Autowired
private GradeService gradeService;
/**
* 格式化前台传过来的日期类型
* @param binder
*/
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
/**
* 查找学生列表
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/findStudentList")
public String findStudentList() {
//学生下拉列表
List<Student> studentList = gradeService.getStudentList();
String jsonString = JSON.toJSONString(studentList);
return jsonString;
}
/**
* 查找学生-课程列表
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/getStudentCourseList")
public String getStudentCourseList(StudentCourse sc) {
//学生-课程下拉列表
List<StudentCourse> majorList = gradeService.getStudentCourseList(sc);
String jsonString = JSON.toJSONString(majorList);
return jsonString;
}
/**
* 查找课程-老师列表
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/getCourseTeacherList")
public String getCourseTeacherList(CourseTeacher ct) {
//课程-老师下拉列表
List<CourseTeacher> clazzList = gradeService.getCourseTeacherList(ct);
String jsonString = JSON.toJSONString(clazzList);
return jsonString;
}
/**
* 查找全部成绩
* @param model
* @return
*/
@ResponseBody
@RequestMapping("/findAllGrade")
public String findAllGrade(Grade grade) {
System.out.println("查找条件--->"+grade);
List<Grade> list = gradeService.findAllGrade(grade);
String jsonString = JSON.toJSONString(list);
return jsonString;
}
/**
* 根据id查询成绩
* @param sid
* @return
*/
//ajax查询数据
@ResponseBody
@RequestMapping("/findGradeById")
public Grade findGradeById(@RequestParam("id") String id) {
System.out.println("查找学号--->"+id);
return gradeService.findGradeById(id);
}
@ResponseBody
@RequestMapping("/deleteGradeById")
public String deleteGradeById(@RequestParam("id") String id) {
Integer flag = gradeService.deleteGradeById(id);
if(flag>0) {
return JSON.toJSONString("删除成功!");
}else {
return JSON.toJSONString("删除失败!");
}
}
@ResponseBody
@RequestMapping("/updateGrade")
public String updateGrade(Grade grade) {
Integer flag = gradeService.updateGrade(grade);
String msg = "";
if(flag>0) {
msg = "修改成功";
}else {
msg = "修改失败";
}
return JSON.toJSONString(msg);
}
@ResponseBody
@RequestMapping("/addGrade")
public String addGrade(Grade grade) {
String uuid = UUID.randomUUID().toString().replace("-", "");
grade.setId(uuid);
Integer flag = gradeService.addGrade(grade);
String msg = "";
if(flag>0) {
msg +="1";
}else {
msg += "0";
}
String studentId = grade.getStudentId();
String courseId = grade.getCourseId();
String teacherId = grade.getTeacherId();
uuid = UUID.randomUUID().toString().replace("-", "");
StudentCourse sc = new StudentCourse(uuid, studentId, courseId);
uuid = UUID.randomUUID().toString().replace("-", "");
CourseTeacher ct = new CourseTeacher(uuid, courseId, teacherId);
StudentCourse scFlag = gradeService.findStudentCourseById(sc);
//如果当前数据不存在中间表StudentCourse,则插入
if(scFlag==null) {
msg+=","+gradeService.addStudentCourse(sc);
}
CourseTeacher ctFlag = gradeService.findCourseTeacherById(ct);
if(ctFlag==null) {
msg+=","+gradeService.addCourseTeacher(ct);
}
return msg;
}
}
5.前端js和jsp
1.先展示学生模块的:
showStudent.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
<title>学生管理</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/common/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/student/js/showStudent.js"></script>
<style type="text/css">
label{
margin-top: 100px;
margin-left:500px;
}
.center{
text-align:center;
}
/* table{
border-collapse:collapse;
border-spacing:0;
margin:0;
padding:0;
border:none;
align-content: center;
} */
td{
/* border-collapse:collapse;
border-spacing:0;
margin:0;
padding:0; */
text-align:center;
}
a{
text-decoration:none;
display: inline-block;
text-align: center;
}
button{
margin: 0;
padding: 0;
font-size: 100%;
}
.buttonClass{
background-color: white!important;
color: blue;
border: 0px;
margin-right: -1px;
margin-bottom: -1px;
}
.form-right{
text-align:center;
}
.search{
margin-top:30px;
}
</style>
</head>
<body>
<br>
<!-- 查询条件 -->
<div class="search">
<label>查找条件:</label><br/>
<form action="${pageContext.request.contextPath }/findAllStudent" method="get" id="searchForm" class="center">
<div>
学号:<input type="text" name="id" id="id" value=""/>
学院: <select id="selectInstitute" onchange="instituteChange()">
</select>
</div>
<div>
姓名:<input type="text" name="name" id="name" value=""/>
专业:<select id="selectMajor" onchange="majorChange()">
</select>
</div>
<div>
电话:<input type="text" name="phone" id="phone" value=""/>
班级:<select id="selectClazz">
</select>
</div>
<div>
年龄:<input type="text" name="age" id="age" value=""/>
性别:<input type="radio" name="sex" value="1"></input>男
<input type="radio" name="sex" value="2" ></input>女
</div>
<br>
<input type="button" onclick="searchStudent()" value="查找"/>
<input type="button" onclick="clearForm()" value="重置"/>
</form>
</div>
<br/><br/>
<!-- 结果列表 -->
<label>结果列表:</label><br/><br/><br/>
<table width="80%" border="1" align="center" cellspacing="0" cellpadding="0" id="show">
<thead>
<tr align="center">
<th>序号</th>
<th>学号</th>
<th>班级</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>电话</th>
<th>专业</th>
<th>学院</th>
<th>操作</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
showStudent.js
//页面加载时执行,查找全部学生列表
$(function () {
//学院下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findInstituteList",
dataType: "json",
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectInstitute").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectInstitute").append(option);
$("#selectInstitute option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("学院列表获取失败!");
}
})
//初始化专业下拉选择
var option = "<option value=-1>请选择</option>";
$("#selectMajor").append(option);
$("#selectMajor option[value='-1']").attr("selected", true);
//初始化班级下拉选择
option = "<option value=-1>请选择</option>";
$("#selectClazz").append(option);
$("#selectClazz option[value='-1']").attr("selected", true);
//学生列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllStudent",
data: {"clazzId":$("#clazzId").val(),"name":$("#name").val(),"id":$("#id").val(),"phone":$("#phone").val(),
"age":$("#age").val(),"sex":$("#sex").val(),"majorId":$("#majorId").val(),"instituteId":$("#instituteId").val()},
dataType: "json",
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var time = new Date(data.birthday);
var sex='';
var birthday=myformatter(time);
var operation="<a href=\"/stuInfoManagerSys/student/jsp/addStudent.jsp\">添加</a>"
+ " <button onclick=\"deleteStudent("+ data.id +")\" class='buttonClass'>删除</button>"
+ " <a href=\"/stuInfoManagerSys/student/jsp/editStudent.jsp?id="+ data.id +"\">修改</a>";
if(data.sex==1){
sex='男';
}else if(data.sex==2){
sex='女';
}
var tr = "";
tr +=
"<td>"+(i+1)+"</td><td>" + data.id + "</td><td>" + data.clazzId + "</td><td>" + data.name
+ "</td><td>" + sex + "</td><td>" + data.age + "</td><td>" + data.phone + "</td><td>" + data.majorId + "</td><td>"
+ data.instituteId + "</td><td>" + operation +"</td>";
$("tbody").append('<tr>'+tr+'</tr>');
}
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("初始化:查找失败!");
}
})
});
//根据id删除学生
function deleteStudent(id){
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/deleteStudentById",
data: {"id":id},
dataType: "json",
success: function(data){
alert("删除成功");
window.location.reload(); //刷新当前页面.
//parent.location.reload(); //刷新父亲对象(用于框架)
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("删除失败");
}
})
}
//根据条件查找学生
function searchStudent(){
var id = $("#id").val();
var name = $("#name").val();
var sex = $('input:radio[name="sex"]:checked').val();
if(sex=="undefined"){
sex='';
}
if(isNaN(sex)){
sex='';
debugger;
}
if(sex!=''){
sex = parseInt(sex);
}
var age = $("#age").val();
var phone = $("#phone").val();
var clazzId = $('#selectClazz option:selected').val();
var majorId = $('#selectMajor option:selected').val();
var instituteId = $('#selectInstitute option:selected').val();
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllStudent",
data: {"id":id,"name":name,"sex":sex,"age":age,"clazzId":clazzId,"phone":phone,"majorId":majorId,"instituteId":instituteId},
dataType: "json",
success: function (studentList) {
$("tbody").html(""); //清除原来的数据
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var time = new Date(data.birthday);
var sex='';
var birthday=myformatter(time);
var operation="<a href=\"/stuInfoManagerSys/student/jsp/addStudent.jsp\">添加</a>"
+ " <button onclick=\"deleteStudent("+ data.id +")\" class='buttonClass'>删除</button>"
+ " <a href=\"/stuInfoManagerSys/student/jsp/editStudent.jsp?id="+ data.id +"\">修改</a>";
if(data.sex==1){
sex='男';
}else if(data.sex==2){
sex='女';
}
var tr = "";
tr +=
"<td>"+(i+1)+"</td><td>" + data.id + "</td><td>" + data.clazzId + "</td><td>" + data.name
+ "</td><td>" + sex + "</td><td>" + data.age + "</td><td>" + data.phone + "</td><td>"
+ data.majorId + "</td><td>" + data.instituteId + "</td><td>" + operation +"</td>";
$("tbody").append('<tr>'+tr+'</tr>');
}
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("查找失败");
}
})
}
//重置
function clearForm(){
//清空查询条件
$("#id").val("");
$("#name").val("");
$("#phone").val("");
$("#age").val("");
$("input[type='radio']").each(function(){
// $(this).attr("checked",false);
this.checked=false;
});
$("#selectClazz").val("-1");
$("#selectMajor").val("-1");
$("#selectInstitute").val("-1");
// $("#selectClazz option[value='-1']").attr("selected", true);
// $("#selectMajor option[value='-1']").attr("selected", true);
// $("#selectInstitute option[value='-1']").attr("selected", true);
//无条件查询
searchStudent();
}
//格式化时间yyyy-mm-dd
function myformatter(date){
var strDate = date.getFullYear()+"-";
strDate += date.getMonth()+1+"-";
strDate += date.getDate();
return strDate ;
}
//当学院改变时触发
function instituteChange(){
//清空专业和班级下拉列表的内容
$("#selectClazz").empty();
$("#selectMajor").empty();
//获取学院的选中的id
var instituteId = $('#selectInstitute option:selected').val();
//异步请求获取该学院下的专业列表
//专业下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findMajorList",
dataType: "json",
data:{"instituteId":instituteId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectMajor").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectMajor").append(option);
$("#selectMajor option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("专业列表获取失败!");
}
})
}
//当专业改变时触发
function majorChange(){
//清空班级下拉列表的内容
$("#selectClazz").empty();
//获取专业下的选中的id
var majorId = $('#selectMajor option:selected').val();
//异步请求获取该学院下的专业列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findClazzList",
dataType: "json",
data:{"majorId":majorId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectClazz").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectClazz").append(option);
$("#selectClazz option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("班级列表获取失败!");
}
})
}
editStudent.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>修改学生信息</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/common/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/student/js/editStudent.js"></script>
<style type="text/css">
label{
margin-top: 100px;
margin-left:500px;
}
.center{
text-align:center;
}
h3{
margin-top: 80px;
margin-left:100px;
}
</style>
</head>
<body>
<h3>修改学生信息:</h3>
<br>
<form action="${pageContext.request.contextPath }/updateStudent" method="get" id="editForm" class="center">
学号:<input type="text" name="id" id="id" value="" readonly="readonly"/>
学院: <select id="selectInstitute" onchange="instituteChange()">
</select>
</div>
<div>
姓名:<input type="text" name="name" id="name" value=""/>
专业:<select id="selectMajor" onchange="majorChange()">
</select>
</div>
<div>
电话:<input type="text" name="phone" id="phone" value=""/>
班级:<select id="selectClazz">
</select>
</div>
<div>
年龄:<input type="text" name="age" id="age" value=""/>
性别:<input type="radio" name="sex" value="1"></input>男
<input type="radio" name="sex" value="2" ></input>女
</div>
<br>
<br><br>
<input type="hidden" name="id" id="id" value=""></input>
<input type="button" name="submit" value="确认修改" onclick="updateStudent()"></input>
<input type="button" name="close" value="关闭" onclick="closePage()"></input>
</form>
</body>
</html>
editStudent.js
//页面加载时执行,查找全部学生列表
$(function () {
//学院下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findInstituteList",
dataType: "json",
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectInstitute").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectInstitute").append(option);
$("#selectInstitute option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("学院列表获取失败!");
}
})
//专业下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findMajorList",
dataType: "json",
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectMajor").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectMajor").append(option);
$("#selectMajor option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("专业列表获取失败!");
}
})
//班级下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findClazzList",
dataType: "json",
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectClazz").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectClazz").append(option);
$("#selectClazz option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("班级列表获取失败!");
}
})
var a=GetRequest();
console.log("id:"+a['id']); //打印出传过来的id
var id=a['id'];
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findStudentById",
data: {"id":id},
dataType: "json",
success: function (student) {
$("#selectClazz").val(student.clazzId);
$("#selectMajor").val(student.majorId);
$("#selectInstitute").val(student.instituteId);
$("#name").val(student.name);
$("#id").val(student.id);
$("#age").val(student.age);
$("#phone").val(student.phone);
if(student.sex==2){
$("input[name=sex]:first").attr("checked","");
$("input[name=sex]:last").attr("checked","checked");
}
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("初始化:查找失败!");
}
})
});
//获取参数值
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = decodeURIComponent(strs[i].split("=")[1]);
}
}
return theRequest;
}
//根据id更新学生信息
function updateStudent(){
var id = $("#id").val();
var name = $("#name").val();
var sex = $('input:radio[name="sex"]:checked').val();
if(sex=="undefined"){
sex='';
}
if(isNaN(sex)){
sex='';
debugger;
}
if(sex!=''){
sex = parseInt(sex);
}
var age = $("#age").val();
var phone = $("#phone").val();
var clazzId = $('#selectClazz option:selected').val();
var majorId = $('#selectMajor option:selected').val();
var instituteId = $('#selectInstitute option:selected').val();
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/updateStudent",
data: {"id":id,"name":name,"sex":sex,"age":age,"clazzId":clazzId,"phone":phone,"majorId":majorId,"instituteId":instituteId},
dataType: "json",
success: function (data) {
alert(data);
closePage();
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("删除失败");
}
})
}
//关闭当前页面,返回上一级页面
function closePage(){
window.history.back(); //返回上一页
window.close();
}
//格式化时间yyyy-mm-dd
function myformatter(date){
var strDate = date.getFullYear()+"-";
strDate += date.getMonth()+1+"-";
strDate += date.getDate();
return strDate ;
}
//当学院改变时触发
function instituteChange(){
//清空专业和班级下拉列表的内容
$("#selectClazz").empty();
$("#selectMajor").empty();
//获取学院的选中的id
var instituteId = $('#selectInstitute option:selected').val();
//异步请求获取该学院下的专业列表
//专业下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findMajorList",
dataType: "json",
data:{"instituteId":instituteId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectMajor").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectMajor").append(option);
$("#selectMajor option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("专业列表获取失败!");
}
})
}
//当专业改变时触发
function majorChange(){
//清空班级下拉列表的内容
$("#selectClazz").empty();
//获取专业下的选中的id
var majorId = $('#selectMajor option:selected').val();
//异步请求获取该学院下的专业列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findClazzList",
dataType: "json",
data:{"majorId":majorId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectClazz").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectClazz").append(option);
$("#selectClazz option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("班级列表获取失败!");
}
})
}
addStudent.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增学生信息</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/common/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/student/js/addStudent.js"></script>
<style type="text/css">
label{
margin-top: 100px;
margin-left:500px;
}
.center{
text-align:center;
}
h3{
margin-top: 80px;
margin-left:100px;
}
</style>
</head>
<body>
<h3>新增学生信息:</h3>
<br>
<form action="${pageContext.request.contextPath }/addStudent" method="get" id="addForm" class="center">
<div>
<input type="text" name="id" id="id" value="" hidden="hidden"/>
学院: <select id="selectInstitute" onchange="instituteChange()">
</select>
</div>
<div>
姓名:<input type="text" name="name" id="name" value=""/>
专业:<select id="selectMajor" onchange="majorChange()">
</select>
</div>
<div>
电话:<input type="text" name="phone" id="phone" value=""/>
班级:<select id="selectClazz">
</select>
</div>
<div>
年龄:<input type="text" name="age" id="age" value=""/>
性别:<input type="radio" name="sex" value="1"></input>男
<input type="radio" name="sex" value="2" ></input>女
</div>
<br>
<br><br>
<input type="button" name="submit" value="添加" onclick="addStudent()"></input>
<input type="button" name="close" value="关闭" onclick="closePage()"></input>
</form>
</body>
</html>
addStudent.js
//页面加载时执行
$(function(){
//学院下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findInstituteList",
dataType: "json",
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectInstitute").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectInstitute").append(option);
$("#selectInstitute option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("学院列表获取失败!");
}
})
//初始化专业下拉选择
var option = "<option value=-1>请选择</option>";
$("#selectMajor").append(option);
$("#selectMajor option[value='-1']").attr("selected", true);
//初始化班级下拉选择
option = "<option value=-1>请选择</option>";
$("#selectClazz").append(option);
$("#selectClazz option[value='-1']").attr("selected", true);
});
//根据id新增学生信息
function addStudent(){
var id = $("#id").val();
var name = $("#name").val();
var sex = $('input:radio[name="sex"]:checked').val();
if(sex=="undefined"){
sex='';
}
if(isNaN(sex)){
sex='';
debugger;
}
if(sex!=''){
sex = parseInt(sex);
}
var age = $("#age").val();
var phone = $("#phone").val();
var clazzId = $('#selectClazz option:selected').val();
var majorId = $('#selectMajor option:selected').val();
var instituteId = $('#selectInstitute option:selected').val();
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/addStudent",
data: {"id":id,"name":name,"sex":sex,"age":age,"clazzId":clazzId,"phone":phone,"majorId":majorId,"instituteId":instituteId},
dataType: "json",
//提交前进行数据校验
beforeSend: function (XHR) {
if(!clazzId || clazzId==-1){
alert("班级必选!");
return false;
}
if(!name){
alert("姓名必填!");
$("#name").focus();//获取焦点
return false;
}
if(!majorId || majorId==-1){
alert("专业必选!");
return false;
}
if(!phone){
alert("电话必填!");
$("#phone").focus();//获取焦点
return false;
}
if(!instituteId || instituteId==-1){
alert("学院必选!");
return false;
}
if(!age){
alert("年龄必填!");
$("#age").focus();//获取焦点
return false;
}
if(!sex){
alert("性别必选!");
return false;
}
},
success: function (data) {
alert(data);
window.location.href="/stuInfoManagerSys/student/jsp/showStudent.jsp";
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("添加失败");
}
})
}
//关闭当前页面,返回上一级页面
function closePage(){
window.history.back(); //返回上一页
window.close();
}
//当学院改变时触发
function instituteChange(){
//清空专业和班级下拉列表的内容
$("#selectClazz").empty();
$("#selectMajor").empty();
//获取学院的选中的id
var instituteId = $('#selectInstitute option:selected').val();
//异步请求获取该学院下的专业列表
//专业下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findMajorList",
dataType: "json",
data:{"instituteId":instituteId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectMajor").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectMajor").append(option);
$("#selectMajor option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("专业列表获取失败!");
}
})
}
//当专业改变时触发
function majorChange(){
//清空班级下拉列表的内容
$("#selectClazz").empty();
//获取专业下的选中的id
var majorId = $('#selectMajor option:selected').val();
//异步请求获取该学院下的专业列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findClazzList",
dataType: "json",
data:{"majorId":majorId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectClazz").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectClazz").append(option);
$("#selectClazz option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("班级列表获取失败!");
}
})
}
2.以下是成绩模块的
showGrade.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
<title>成绩管理</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/common/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/grade/js/showGrade.js"></script>
<style type="text/css">
label{
margin-top: 100px;
margin-left:500px;
}
.center{
text-align:center;
}
/* table{
border-collapse:collapse;
border-spacing:0;
margin:0;
padding:0;
border:none;
align-content: center;
} */
td{
/* border-collapse:collapse;
border-spacing:0;
margin:0;
padding:0; */
text-align:center;
}
a{
text-decoration:none;
display: inline-block;
text-align: center;
}
button{
margin: 0;
padding: 0;
font-size: 100%;
}
.buttonClass{
background-color: white!important;
color: blue;
border: 0px;
margin-right: -1px;
margin-bottom: -1px;
}
.form-right{
text-align:center;
}
.search{
margin-top:30px;
}
</style>
</head>
<body>
<br>
<!-- 查询条件 -->
<div class="search">
<label>查找条件:</label><br/>
<form action="${pageContext.request.contextPath }/findAllGrade" method="get" id="searchForm" class="center">
<div>
考试号:<input type="text" name="id" id="id" value=""/>
</div>
<div>
考试时间:<input type="date" name="examTime" id="examTime" value=""/>
</div>
<div>
考试类型:<input type="text" name="examType" id="examType" value=""/>
</div>
<div>
学生姓名: <select id="selectStudent" onchange="studentChange()">
</select>
</div>
<div>
考试课程:<select id="selectCourse" onchange="courseChange()">
</select>
</div>
<div>
任课老师:<select id="selectTeacher">
</select>
</div>
<div>
成绩:<input type="text" name="score" id="score" value=""/>
</div>
<br>
<input type="button" onclick="searchGrade()" value="查找"/>
<input type="button" onclick="clearForm()" value="重置"/>
</form>
</div>
<br/><br/>
<!-- 结果列表 -->
<label>结果列表:</label><br/><br/><br/>
<table width="50%" border="1" align="center" cellspacing="0" cellpadding="0" id="show">
<thead>
<tr align="center">
<th>序号</th>
<th>考试号</th>
<th>考试时间</th>
<th>考试类型</th>
<th>学生姓名</th>
<th>考试课程</th>
<th>任课老师</th>
<th>成绩</th>
<th>操作</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
showGrade.js
//页面加载时执行,查找全部成绩列表
$(function () {
//学生下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findStudentList",
dataType: "json",
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectStudent").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectStudent").append(option);
$("#selectStudent option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("学院列表获取失败!");
}
})
//初始化学生-课程下拉选择
var option = "<option value=-1>请选择</option>";
$("#selectCourse").append(option);
$("#selectCourse option[value='-1']").attr("selected", true);
//初始化课程-老师下拉选择
option = "<option value=-1>请选择</option>";
$("#selectTeacher").append(option);
$("#selectTeacher option[value='-1']").attr("selected", true);
//成绩列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllGrade",
dataType: "json",
success: function (gradeList) {
for(var i=0;i<gradeList.length;i++){
var data = gradeList[i];
var tmp = new Date(data.examTime);
var examTime = myformatter(tmp);
var operation="<a href=\"/stuInfoManagerSys/grade/jsp/addGrade.jsp\">添加</a>"
+ " <button onclick=\"deleteGrade(\'"+ data.id +"\')\" class='buttonClass'>删除</button>"
+ " <a href=\"/stuInfoManagerSys/grade/jsp/editGrade.jsp?id="+ data.id +"\">修改</a>";
var tr = "";
tr +=
"<td>"+(i+1)+"</td><td>" + data.id + "</td><td>" + examTime + "</td><td>" + data.examType
+ "</td><td>" + data.studentId + "</td><td>" + data.courseId + "</td><td>" + data.teacherId + "</td><td>" + data.score + "</td><td>"
+ operation + "</td>";
$("tbody").append('<tr>'+tr+'</tr>');
}
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("初始化:查找失败!");
}
})
});
//根据id删除成绩
function deleteGrade(id){
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/deleteGradeById",
data: {"id":id},
dataType: "json",
success: function(data){
alert(data);
window.location.reload(); //刷新当前页面.
//parent.location.reload(); //刷新父亲对象(用于框架)
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("删除失败");
}
})
}
//根据条件查找成绩
function searchGrade(){
var id = $("#id").val();
var examTime = $("#examTime").val();
var examType = $("#examType").val();
var score = $("#score").val();
if(score==null || score==''){
score=0;
}
var studentId = $('#selectStudent option:selected').val();
var courseId = $('#selectCourse option:selected').val();
var teacherId = $('#selectTeacher option:selected').val();
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllGrade",
data: {"id":id,"examTime":examTime,"examType":examType,"score":score,"studentId":studentId,"courseId":courseId,"teacherId":teacherId},
dataType: "json",
success: function (gradeList) {
$("tbody").html(""); //清除原来的数据
for(var i=0;i<gradeList.length;i++){
var data = gradeList[i];
var tmp = new Date(data.examTime);
var examTime = myformatter(tmp);
var operation="<a href=\"/stuInfoManagerSys/grade/jsp/addGrade.jsp\">添加</a>"
+ " <button onclick=\"deleteGrade("+ data.id +")\" class='buttonClass'>删除</button>"
+ " <a href=\"/stuInfoManagerSys/grade/jsp/editGrade.jsp?id="+ data.id +"\">修改</a>";
var tr = "";
tr +=
"<td>"+(i+1)+"</td><td>" + data.id + "</td><td>" + examTime + "</td><td>" + data.examType
+ "</td><td>" + data.studentId + "</td><td>" + data.courseId + "</td><td>" + data.teacherId + "</td><td>" + data.score + "</td><td>"
+ operation + "</td>";
$("tbody").append('<tr>'+tr+'</tr>');
}
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("查找失败");
}
})
}
//重置
function clearForm(){
//清空查询条件
$("#id").val("");
$("#examTime").val("");
$("#examType").val("");
$("#score").val("");
$("#selectStudent").val("-1");
$("#selectCourse").val("-1");
$("#selectTeacher").val("-1");
//无条件查询
searchGrade();
}
//格式化时间yyyy-mm-dd
function myformatter(date){
var strDate = date.getFullYear()+"-";
strDate += date.getMonth()+1+"-";
strDate += date.getDate();
return strDate ;
}
//当学生改变时触发
function studentChange(){
//清空下拉列表的内容
$("#selectCourse").empty();
$("#selectTeacher").empty();
//获取学生的选中的id
var studentId = $('#selectStudent option:selected').val();
//异步请求获取该学院下的专业列表
//专业下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/getStudentCourseList",
dataType: "json",
data:{"studentId":studentId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectCourse").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectCourse").append(option);
$("#selectCourse option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("课程列表获取失败!");
}
})
}
//当课程改变时触发
function courseChange(){
//清空老师下拉列表的内容
$("#selectTeacher").empty();
//获取专业下的选中的id
var courseId = $('#selectCourse option:selected').val();
//异步请求获取该学院下的专业列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/getCourseTeacherList",
dataType: "json",
data:{"courseId":courseId},
success: function (instituteList) {
for(var i=0;i<instituteList.length;i++){
var data = instituteList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectTeacher").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectTeacher").append(option);
$("#selectTeacher option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("老师列表获取失败!");
}
})
}
editGrade.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>修改成绩信息</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/common/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/grade/js/editGrade.js"></script>
<style type="text/css">
label{
margin-top: 100px;
margin-left:500px;
}
.center{
text-align:center;
}
h3{
margin-top: 80px;
margin-left:100px;
}
</style>
</head>
<body>
<h3>修改成绩信息:</h3>
<br>
<form action="${pageContext.request.contextPath }/updateGrade" method="get" id="editForm" class="center">
<div>
考试号:<input type="text" name="id" id="id" value="" readonly="readonly"/>
</div>
<div>
考试时间:<input type="date" name="examTime" id="examTime" value=""/>
</div>
<div>
考试类型:<input type="text" name="examType" id="examType" value=""/>
</div>
<div>
学生姓名: <select id="selectStudent" disabled="disabled">
</select>
</div>
<div>
考试课程:<select id="selectCourse" disabled="disabled">
</select>
</div>
<div>
任课老师:<select id="selectTeacher" disabled="disabled">
</select>
</div>
<div>
成绩:<input type="text" name="score" id="score" value=""/>
</div>
<br>
<br><br>
<input type="hidden" name="id" id="id" value=""></input>
<input type="button" name="submit" value="确认修改" onclick="updateGrade()"></input>
<input type="button" name="close" value="关闭" onclick="closePage()"></input>
</form>
</body>
</html>
editGrade.js
//页面加载时执行,查找全部成绩列表
$(function () {
//学生下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findStudentList",
dataType: "json",
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectStudent").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectStudent").append(option);
$("#selectStudent option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("学生列表获取失败!");
}
})
//课程下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/getStudentCourseList",
dataType: "json",
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectCourse").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectCourse").append(option);
$("#selectCourse option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("课程列表获取失败!");
}
})
//老师下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/getCourseTeacherList",
dataType: "json",
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectTeacher").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectTeacher").append(option);
$("#selectTeacher option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("老师列表获取失败!");
}
})
var a=GetRequest();
console.log("id:"+a['id']); //打印出传过来的id
var id=a['id'];
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findGradeById",
data: {"id":id},
dataType: "json",
success: function (grade) {
$("#selectTeacher").val(grade.teacherId);
$("#selectCourse").val(grade.courseId);
$("#selectStudent").val(grade.studentId);
$("#examTime").val(grade.examTime);
$("#id").val(grade.id);
$("#examType").val(grade.examType);
$("#score").val(grade.score);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("初始化:查找失败!");
}
})
});
//获取参数值
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = decodeURIComponent(strs[i].split("=")[1]);
}
}
return theRequest;
}
//根据id更新成绩信息
function updateGrade(){
var id = $("#id").val();
var examTime = $("#examTime").val();
var examType = $("#examType").val();
var score = $("#score").val();
if(score==null || score==''){
score=0;
}
var studentId = $('#selectStudent option:selected').val();
var courseId = $('#selectCourse option:selected').val();
var teacherId = $('#selectTeacher option:selected').val();
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/updateGrade",
data: {"id":id,"examTime":examTime,"examType":examType,"score":score,"studentId":studentId,"courseId":courseId,"teacherId":teacherId},
dataType: "json",
success: function (data) {
alert(data);
closePage();
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("修改失败");
}
})
}
//关闭当前页面,返回上一级页面
function closePage(){
window.history.back(); //返回上一页
window.close();
}
//格式化时间yyyy-mm-dd
function myformatter(date){
var strDate = date.getFullYear()+"-";
strDate += date.getMonth()+1+"-";
strDate += date.getDate();
return strDate ;
}
addGrade.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增成绩信息</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/common/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/grade/js/addGrade.js"></script>
<style type="text/css">
label{
margin-top: 100px;
margin-left:500px;
}
.center{
text-align:center;
}
h3{
margin-top: 80px;
margin-left:100px;
}
</style>
</head>
<body>
<h3>新增成绩信息:</h3>
<br>
<form action="${pageContext.request.contextPath }/addGrade" method="get" id="addForm" class="center">
<div>
<input type="text" name="id" id="id" value="" hidden="hidden"/>
</div>
<div>
考试时间:<input type="date" name="examTime" id="examTime" value=""/>
</div>
<div>
考试类型:<input type="text" name="examType" id="examType" value=""/>
</div>
<div>
学生姓名: <select id="selectStudent">
</select>
</div>
<div>
考试课程:<select id="selectCourse">
</select>
</div>
<div>
任课老师:<select id="selectTeacher">
</select>
</div>
<div>
成绩:<input type="text" name="score" id="score" value=""/>
</div>
<br>
<br><br>
<input type="button" name="submit" value="添加" onclick="addGrade()"></input>
<input type="button" name="close" value="关闭" onclick="closePage()"></input>
</form>
</body>
</html>
addGrade.js
//页面加载时执行
$(function(){
//学生下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllStudent",
dataType: "json",
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectStudent").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectStudent").append(option);
$("#selectStudent option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("学生列表获取失败!");
}
})
//课程下拉列表
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllCourse",
dataType: "json",
data:{},
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectCourse").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectCourse").append(option);
$("#selectCourse option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("课程列表获取失败!");
}
})
$.ajax({
type: "post",
url: "/stuInfoManagerSys/findAllTeacher",
dataType: "json",
data:{},
success: function (studentList) {
for(var i=0;i<studentList.length;i++){
var data = studentList[i];
var option = "<option value="+data.id+">"+data.name+"</option>";
$("#selectTeacher").append(option);
}
var option = "<option value=-1>请选择</option>";
$("#selectTeacher").append(option);
$("#selectTeacher option[value='-1']").attr("selected", true);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("老师列表获取失败!");
}
})
});
//根据id新增成绩信息
function addGrade(){
//var id = $("#id").val();
var examTime = $("#examTime").val();
var examType = $("#examType").val();
var score = $("#score").val();
if(score==null || score==''){
score=0;
}
var studentId = $('#selectStudent option:selected').val();
var courseId = $('#selectCourse option:selected').val();
var teacherId = $('#selectTeacher option:selected').val();
debugger;
$.ajax({
type: "post",
url: "/stuInfoManagerSys/addGrade",
data: {"examTime":examTime,"examType":examType,"score":score,"studentId":studentId,"courseId":courseId,"teacherId":teacherId},
dataType: "text",
//提交前进行数据校验
beforeSend: function (XHR) {
if(!teacherId || teacherId==-1){
alert("老师必选!");
return false;
}
if(!courseId || courseId==-1){
alert("课程必选!");
return false;
}
if(!score){
alert("成绩必填!");
$("#score").focus();//获取焦点
return false;
}
if(!studentId || studentId==-1){
alert("学生必选!");
return false;
}
},
success: function (data) {
//var str = eval("(" + data + ")");
alert("data的类型--->"+typeof(data));
var msg = data.split(",");
if(msg[0]==1){
alert("新增成功!");
}else{
alert("新增失败!");
}
if(msg[1]==1){
alert("成功插入中间表StudentCourse");
}
if(msg[2]==1){
alert("成功插入中间表CourseTeacher");
}
window.location.href="/stuInfoManagerSys/grade/jsp/showGrade.jsp";
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("添加失败");
}
})
}
//关闭当前页面,返回上一级页面
function closePage(){
window.history.back(); //返回上一页
window.close();
}
当学生改变时触发
//function studentChange(){
// //清空课程和老师下拉列表的内容
// $("#selectTeacher").empty();
// $("#selectCourse").empty();
// //获取学生的选中的id
// var studentId = $('#selectStudent option:selected').val();
// //异步请求获取该学生下的课程列表
// //课程下拉列表
// $.ajax({
// type: "post",
// url: "/stuInfoManagerSys/getStudentCourseList",
// dataType: "json",
// data:{"studentId":studentId},
// success: function (studentList) {
// for(var i=0;i<studentList.length;i++){
// var data = studentList[i];
// var option = "<option value="+data.id+">"+data.name+"</option>";
// $("#selectCourse").append(option);
// }
// var option = "<option value=-1>请选择</option>";
// $("#selectCourse").append(option);
// $("#selectCourse option[value='-1']").attr("selected", true);
// },
// //null值不会被success回调函数捕获,因此可以通过error来实现该功能
// error: function () {
// alert("课程列表获取失败!");
// }
// })
//}
//
当课程改变时触发
//function courseChange(){
// //清空老师下拉列表的内容
// $("#selectTeacher").empty();
// //获取课程下的选中的id
// var courseId = $('#selectCourse option:selected').val();
// //异步请求获取该学生下的课程列表
// $.ajax({
// type: "post",
// url: "/stuInfoManagerSys/getCourseTeacherList",
// dataType: "json",
// data:{"courseId":courseId},
// success: function (studentList) {
// for(var i=0;i<studentList.length;i++){
// var data = studentList[i];
// var option = "<option value="+data.id+">"+data.name+"</option>";
// $("#selectTeacher").append(option);
// }
// var option = "<option value=-1>请选择</option>";
// $("#selectTeacher").append(option);
// $("#selectTeacher option[value='-1']").attr("selected", true);
// },
// //null值不会被success回调函数捕获,因此可以通过error来实现该功能
// error: function () {
// alert("老师列表获取失败!");
// }
// })
//
//}
四、详细配置文件
1.mybatis配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
<!-- 开启驼峰命名 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 只需配置别名,其他的配置使用其他的方法进行配置 -->
<typeAliases>
<package name="com.qxf.pojo"/>
</typeAliases>
</configuration>
2.spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 导入jdbc配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 注解的扫描路径 -->
<context:component-scan base-package="com.qxf.*"/>
<!-- 连接池 -->
<!-- 配置1个阿里连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driver}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<!-- 连接池最大使用连接数 -->
<property name="maxActive">
<value>20</value>
</property>
<!-- 初始化连接大小 -->
<property name="initialSize">
<value>1</value>
</property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait">
<value>60000</value>
</property>
<!-- 连接池最大空闲 -->
<property name="maxIdle">
<value>20</value>
</property>
<!-- 连接池最小空闲 -->
<property name="minIdle">
<value>3</value>
</property>
<!-- 自动清除无用连接 -->
<property name="removeAbandoned">
<value>true</value>
</property>
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout">
<value>180</value>
</property>
<!-- 连接属性 -->
<property name="connectionProperties">
<value>clientEncoding=UTF-8</value>
</property>
</bean>
<!-- mybatis的sessionfatory -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:mybatis-config.xml"
p:mapperLocations="classpath:/mapper/*.xml"/>
<!-- dao的实现类对象,既mapper对象 。从上面的session工厂中,自动创建出所有mapper文件下的实现类对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.qxf.mapper"
p:sqlSessionFactoryBeanName="sqlSessionFactory"/>
<!-- 事务管理器,用于注解注入事务 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
</beans>
3.springMVC配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 注解的扫描路径 -->
<context:component-scan base-package="com.qxf.controller"/>
<mvc:annotation-driven/>
<!-- springmvc的视图解析器 -->
<!-- <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean> -->
</beans>
4.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml;
classpath:springmvc-servlet.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 放行静态资源 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<display-name>stuInfoManagerSys</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
5.jdbc.properties(根据情况修改)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/stuinfosys
jdbc.username=root
jdbc.password=root
6.日志文件
#USE THIS SETTING FOR OUTPUT MYBATIS`s SQL ON THE CONSOLE
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
7.pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qxf</groupId>
<artifactId>stuInfoManagerSys</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 统一管理版本号 -->
<properties>
<!-- spring版本号 -->
<spring.version>4.0.2.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<!-- 添加依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 导入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
</project>
五、总结和说明
说明:要在项目的根目录下建一个login.jsp文件,因为我修改了启动默认打开的文件不是index.jsp。
总结:
1.在web.xml文件中,如果拦截路径为/,则还要配置放行静态资源,不然会去请求静态资源,我在项目中就遇到过请求js文件的,后来放行了静态资源才解决
2.页面打算后面用前端框架美化一下
3.暂时还没有实现分页查询的效果,后面会补上
4.代码尽量自己敲,敲的过程过,才会发现问题,才会有成长
5.在敲代码前一定要有一个清晰的流程和逻辑,理清楚关系再写代码都不迟