id(主键, 自增)
name (学生姓名)
gender (性别)
age(年龄)
class_id(班级ID)
id (主键, 自增)
class_name(班级名称)
课程表(course)
id (主键, 自增)
course_name (课程名称)
teacher(授课老师)
id (主键, 自增)
student_id(学生ID, 外键)
course_id(课程ID, 外键)
score(成绩)
要求:根据传入的参数动态查询学生信息。参数包括学生姓名(模糊查询)、性别、年龄范围、班级名称。
示例:查询姓名为“张”、性别为“男”、年龄在18到22岁之间、班级名称为“计算机科学与技术1班”的学生。
要求:分页查询所有学生的姓名、班级名称、所选课程名称及成绩,每页显示10条记录
要求:统计每个班级的平均成绩,并按照平均成绩从高到低排序。
提示:需要关联学生表、班级表和选课表。
要求:实现批量插入学生选课记录的功能,确保性能高效。
示例:一次性插入100条选课记录。
要求:查询所有未选任何课程的学生信息。
要求:查询每门课程的选课人数和平均成绩,并按照选课人数从高到低排序。
要求:根据传入的参数动态更新学生信息。参数包括学生ID、姓名、性别、年龄、班级ID,只更新非空的字段。
提示:使用 MyBatis 的动态 SQL
要求:查询所有学生中,成绩排名前10的学生信息(包括姓名、班级名称、总成绩)。
提示:需要对选课表中的成绩进行汇总和排序。
要求:查询每门课程的最高分、最低分和平均分,并按照课程名称排序。
dao
package com.qcby.dao;
import com.qcby.entity.StudentCourse;
import java.util.List;
public interface StudentCourseDao {
List select();
}
package com.qcby.dao;
import com.qcby.entity.Course;
import com.qcby.entity.Student;
import com.qcby.entity.StudentCourse;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface StudentDao {
List select1(Student student);
List select2(@Param("offset") int offset, @Param("pageSize") int pageSize);
List select3();
int insert(List studentCourses);
List select4();
List select5();
int update(Student student);
List select6();
}
entity
package com.qcby.entity;
public class Class {
private Integer id;
private String class_name;
@Override
public String toString() {
return "Class{" +
"id=" + id +
", class_name='" + class_name + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
}
package com.qcby.entity;
public class Course {
private Integer id;
private String course_name;
private String teacher;
private Double averageScore;
private Integer studentCount;
@Override
public String toString() {
return "Course{" +
"id=" + id +
", course_name='" + course_name + '\'' +
", teacher='" + teacher + '\'' +
", averageScore=" + averageScore +
", studentCount=" + studentCount +
'}';
}
public Double getAverageScore() {
return averageScore;
}
public void setAverageScore(Double averageScore) {
this.averageScore = averageScore;
}
public Integer getStudentCount() {
return studentCount;
}
public void setStudentCount(Integer studentCount) {
this.studentCount = studentCount;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
}
package com.qcby.entity;
import java.util.List;
public class Student {
private Integer id;
private String name;
private String gender;
private Integer age;
private Integer minAge;
private Integer maxAge;
private Integer class_id;
private String className;
private List studentCourses;
private Double averageScore;
private Double totalScore;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", minAge=" + minAge +
", maxAge=" + maxAge +
", class_id=" + class_id +
", className='" + className + '\'' +
", studentCourses=" + studentCourses +
", averageScore=" + averageScore +
", totalScore=" + totalScore +
'}';
}
public Double getAverageScore() {
return averageScore;
}
public void setAverageScore(Double averageScore) {
this.averageScore = averageScore;
}
public Double getTotalScore() {
return totalScore;
}
public void setTotalScore(Double totalScore) {
this.totalScore = totalScore;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public List getStudentCourses() {
return studentCourses;
}
public void setStudentCourses(List studentCourses) {
this.studentCourses = studentCourses;
}
public Integer getMinAge() {
return minAge;
}
public void setMinAge(Integer minAge) {
this.minAge = minAge;
}
public Integer getMaxAge() {
return maxAge;
}
public void setMaxAge(Integer maxAge) {
this.maxAge = maxAge;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getClass_id() {
return class_id;
}
public void setClass_id(Integer class_id) {
this.class_id = class_id;
}
}
package com.qcby.entity;
public class StudentCourse{
private Long id;
private Long studentId;
private Long courseId;
private String score;
private String student_name;
private String class_name;
private String courseName;
private Double maxScore;
private Double minScore;
private Double avgScore;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getStudentId() { return studentId; }
public void setStudentId(Long studentId) { this.studentId = studentId; }
public Long getCourseId() { return courseId; }
public void setCourseId(Long courseId) { this.courseId = courseId; }
public String getScore() { return score; }
public void setScore(String score) { this.score = score; }
public String getCourseName() { return courseName; }
public void setCourseName(String courseName) { this.courseName = courseName; }
public Double getMaxScore() { return maxScore; }
public void setMaxScore(Double maxScore) { this.maxScore = maxScore; }
public Double getMinScore() { return minScore; }
public void setMinScore(Double minScore) { this.minScore = minScore; }
public Double getAvgScore() { return avgScore; }
public void setAvgScore(Double avgScore) { this.avgScore = avgScore; }
public String getStudent_name() {
return student_name;
}
public void setStudent_name(String student_name) {
this.student_name = student_name;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
@Override
public String toString() {
return "StudentCourse{" +
"id=" + id +
", studentId=" + studentId +
", courseId=" + courseId +
", score='" + score + '\'' +
", student_name='" + student_name + '\'' +
", class_name='" + class_name + '\'' +
", courseName='" + courseName + '\'' +
", maxScore=" + maxScore +
", minScore=" + minScore +
", avgScore=" + avgScore +
'}';
}
}
mapper
INSERT INTO `student_course` (student_id, course_id, score)
VALUES
(#{item.studentId}, #{item.courseId}, #{item.score})
UPDATE `student`
name = #{name},
gender = #{gender},
age = #{age},
class_id = #{class_id}
WHERE id = #{id}
配置文件
测试
import com.qcby.dao.StudentCourseDao;
import com.qcby.entity.StudentCourse;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class StudentCourseTest {
private InputStream in = null;
private SqlSession session = null;
private StudentCourseDao studentCourseDao = null;
@Before
public void init() throws IOException {
in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
studentCourseDao = session.getMapper(StudentCourseDao.class);
}
@After
public void destroy() throws IOException {
session.close();
in.close();
}
@Test
public void select() {
List resultList = studentCourseDao.select();
System.out.println("课程成绩统计:");
System.out.println("-----------------------------------");
for (StudentCourse stats : resultList) {
System.out.println("课程名称: " + stats.getCourseName());
System.out.println("最高分: " + stats.getMaxScore());
System.out.println("最低分: " + stats.getMinScore());
System.out.println("平均分: " + stats.getAvgScore());
System.out.println("-------------------");
}
}
}
import com.qcby.dao.StudentDao;
import com.qcby.entity.Course;
import com.qcby.entity.Student;
import com.qcby.entity.StudentCourse;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class StudentTest {
private InputStream in = null;
private SqlSession session = null;
private StudentDao studentDao = null;
@Before //前置通知, 在方法执行之前执行
public void init() throws IOException {
//加载主配置文件,目的是为了构建SqlSessionFactory对象
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//通过SqlSessionFactory工厂对象创建SqlSesssion对象
session = factory.openSession();
//通过Session创建Dao接口代理对象
studentDao = session.getMapper(StudentDao.class);
}
@After //@After: 后置通知, 在方法执行之后执行 。
public void destory() throws IOException {
//释放资源
session.close();
in.close();
}
@Test
public void select1() {
Student student = new Student();
student.setName("张");
student.setGender("男");
student.setMinAge(18);
student.setMaxAge(22);
student.setClassName("计算机科学与技术1班");
List students = studentDao.select1(student);
for (Student s : students) {
System.out.println(s);
}
}
@Test
public void select2() {
int pageNum = 1;
int pageSize = 10;
int offset = (pageNum - 1) * pageSize;
List resultList = studentDao.select2(offset, pageSize);
System.out.println("第 " + pageNum + " 页学生选课信息:");
System.out.println("-----------------------------------");
for (StudentCourse studentCourse : resultList) {
System.out.println("学生姓名: " + studentCourse.getStudent_name());
System.out.println("班级名称: " + studentCourse.getClass_name());
System.out.println("课程名称: " + studentCourse.getCourseName());
System.out.println("成绩: " + studentCourse.getScore());
System.out.println("-------------------");
}
System.out.println("共查询到 " + resultList.size() + " 条记录");
}
@Test
public void select3() {
List resultList = studentDao.select3();
for (Student student : resultList) {
System.out.println("班级名称: " + student.getClassName());
System.out.println("平均成绩: " + student.getAverageScore());
System.out.println("-------------------");
}
}
@Test
public void insert() {
List studentCourses = new ArrayList<>();
for (int i = 0; i < 100; i++) {
StudentCourse studentCourse = new StudentCourse();
studentCourse.setStudentId((long) ((i % 4) + 1));
studentCourse.setCourseId((long) ((i % 8) + 1));
studentCourse.setScore("80");
studentCourses.add(studentCourse);
}
int rows = studentDao.insert(studentCourses);
System.out.println("插入的学生选课记录数: " + rows);
session.commit();
}
@Test
public void select4() {
List students = studentDao.select4();
for (Student student : students) {
System.out.println(student);
}
}
@Test
public void select5() {
List resultList = studentDao.select5();
for (Course course : resultList) {
System.out.println("课程名称: " + course.getCourse_name());
System.out.println("平均成绩: " + course.getAverageScore());
System.out.println("选课人数: " + course.getStudentCount());
System.out.println("-------------------");
}
}
@Test
public void update() {
Student student = new Student();
student.setId(1);
student.setName("三");
student.setAge(18);
int rows = studentDao.update(student);
System.out.println("更新的记录数: " + rows);
session.commit();
}
@Test
public void select6() {
List resultList = studentDao.select6();
System.out.println("成绩排名前10的学生:");
System.out.println("-----------------------------------");
for (Student student : resultList) {
System.out.println("学生姓名: " + student.getName());
System.out.println("班级名称: " + student.getClassName());
System.out.println("总成绩: " + student.getTotalScore());
System.out.println("-------------------");
}
}
}