spring boot整合mybatis
项目结构
controller
package com.qcby.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class HomeController { @GetMapping(\"/\") public String index() { return \"index\"; }}
package com.qcby.controller;import com.qcby.domain.Student;import com.qcby.domain.Teacher;import com.qcby.service.StudentService;import com.qcby.service.TeacherService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;@Controller@RequestMapping(\"/students\")public class StudentController { @Autowired private StudentService studentService; @Autowired private TeacherService teacherService; // 显示所有学生 @GetMapping public String list(Model model) { model.addAttribute(\"students\", studentService.findAll()); return \"student/list\"; } // 显示添加学生表单 @GetMapping(\"/add\") public String addForm(Model model) { model.addAttribute(\"student\", new Student()); model.addAttribute(\"teachers\", teacherService.findAll()); return \"student/form\"; } // 保存学生 @PostMapping(\"/save\") public String save(@ModelAttribute Student student) { if (student.getId() == null) { studentService.insert(student); } else { studentService.update(student); } return \"redirect:/students\"; } // 显示编辑学生表单 @GetMapping(\"/edit/{id}\") public String editForm(@PathVariable Integer id, Model model) { model.addAttribute(\"student\", studentService.findById(id)); model.addAttribute(\"teachers\", teacherService.findAll()); return \"student/form\"; } // 删除学生 @GetMapping(\"/delete/{id}\") public String delete(@PathVariable Integer id) { studentService.delete(id); return \"redirect:/students\"; } // 按教师ID查询学生 @GetMapping(\"/by-teacher/{teacherId}\") public String listByTeacher(@PathVariable Integer teacherId, Model model) { model.addAttribute(\"students\", studentService.findByTeacherId(teacherId)); Teacher teacher = teacherService.findById(teacherId); model.addAttribute(\"teacherName\", teacher != null ? teacher.getName() : \"未知教师\"); return \"student/list-by-teacher\"; }}
package com.qcby.controller;import com.qcby.domain.Teacher;import com.qcby.service.TeacherService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;@Controller@RequestMapping(\"/teachers\")public class TeacherController { @Autowired private TeacherService teacherService; // 显示所有教师 @GetMapping public String list(Model model) { model.addAttribute(\"teachers\", teacherService.findAll()); return \"teacher/list\"; } // 显示添加教师表单 @GetMapping(\"/add\") public String addForm(Model model) { model.addAttribute(\"teacher\", new Teacher()); return \"teacher/form\"; } // 保存教师 @PostMapping(\"/save\") public String save(@ModelAttribute Teacher teacher) { if (teacher.getId() == null) { teacherService.insert(teacher); } else { teacherService.update(teacher); } return \"redirect:/teachers\"; } // 显示编辑教师表单 @GetMapping(\"/edit/{id}\") public String editForm(@PathVariable Integer id, Model model) { model.addAttribute(\"teacher\", teacherService.findById(id)); return \"teacher/form\"; } // 删除教师 @GetMapping(\"/delete/{id}\") public String delete(@PathVariable Integer id) { teacherService.delete(id); return \"redirect:/teachers\"; }}
domain
package com.qcby.domain;import lombok.Data;import java.time.LocalDateTime;@Datapublic class Student { private Integer id; private String name; private Integer age; private String gender; private String grade; private Integer teacherId; private String teacherName; // 用于显示教师姓名,不映射到数据库 private LocalDateTime createTime; private LocalDateTime updateTime;}
package com.qcby.domain;import lombok.Data;import java.time.LocalDateTime;@Datapublic class Teacher { private Integer id; private String name; private Integer age; private String subject; private String phone; private String email; private LocalDateTime createTime; private LocalDateTime updateTime;}
mapper
package com.qcby.mapper;import com.qcby.domain.Student;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface StudentMapper { // 查询所有学生 List findAll(); // 根据ID查询学生 Student findById(Integer id); // 添加学生 int insert(Student student); // 更新学生 int update(Student student); // 删除学生 int delete(Integer id); // 根据教师ID查询学生 List findByTeacherId(Integer teacherId);}
package com.qcby.mapper;import com.qcby.domain.Teacher;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface TeacherMapper { // 查询所有教师 List findAll(); // 根据ID查询教师 Teacher findById(Integer id); // 添加教师 int insert(Teacher teacher); // 更新教师 int update(Teacher teacher); // 删除教师 int delete(Integer id);}
service
package com.qcby.service;import com.qcby.domain.Student;import java.util.List;public interface StudentService { List findAll(); Student findById(Integer id); int insert(Student student); int update(Student student); int delete(Integer id); List findByTeacherId(Integer teacherId);}
package com.qcby.service;import com.qcby.domain.Teacher;import java.util.List;public interface TeacherService { List findAll(); Teacher findById(Integer id); int insert(Teacher teacher); int update(Teacher teacher); int delete(Integer id);}
package com.qcby.service.impl;import com.qcby.domain.Student;import com.qcby.mapper.StudentMapper;import com.qcby.service.StudentService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class StudentServiceImpl implements StudentService { @Autowired private StudentMapper studentMapper; @Override public List findAll() { return studentMapper.findAll(); } @Override public Student findById(Integer id) { return studentMapper.findById(id); } @Override public int insert(Student student) { return studentMapper.insert(student); } @Override public int update(Student student) { return studentMapper.update(student); } @Override public int delete(Integer id) { return studentMapper.delete(id); } @Override public List findByTeacherId(Integer teacherId) { return studentMapper.findByTeacherId(teacherId); }}
package com.qcby.service.impl;import com.qcby.domain.Teacher;import com.qcby.mapper.TeacherMapper;import com.qcby.service.TeacherService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class TeacherServiceImpl implements TeacherService { @Autowired private TeacherMapper teacherMapper; @Override public List findAll() { return teacherMapper.findAll(); } @Override public Teacher findById(Integer id) { return teacherMapper.findById(id); } @Override public int insert(Teacher teacher) { return teacherMapper.insert(teacher); } @Override public int update(Teacher teacher) { return teacherMapper.update(teacher); } @Override public int delete(Integer id) { return teacherMapper.delete(id); }}
mapper.xml
SELECT s.*, t.name as teacher_name FROM student s LEFT JOIN teacher t ON s.teacher_id = t.id ORDER BY s.id DESC SELECT s.*, t.name as teacher_name FROM student s LEFT JOIN teacher t ON s.teacher_id = t.id WHERE s.id = #{id} SELECT s.*, t.name as teacher_name FROM student s LEFT JOIN teacher t ON s.teacher_id = t.id WHERE s.teacher_id = #{teacherId} ORDER BY s.id DESC INSERT INTO student (name, age, gender, grade, teacher_id) VALUES (#{name}, #{age}, #{gender}, #{grade}, #{teacherId}) UPDATE student SET name = #{name}, age = #{age}, gender = #{gender}, grade = #{grade}, teacher_id = #{teacherId} WHERE id = #{id} DELETE FROM student WHERE id = #{id}
SELECT * FROM teacher ORDER BY id DESC SELECT * FROM teacher WHERE id = #{id} INSERT INTO teacher (name, age, subject, phone, email) VALUES (#{name}, #{age}, #{subject}, #{phone}, #{email}) UPDATE teacher SET name = #{name}, age = #{age}, subject = #{subject}, phone = #{phone}, email = #{email} WHERE id = #{id} DELETE FROM teacher WHERE id = #{id}
html
学生列表
学生列表
教师列表
教师学生管理系统
properties
# ?????server.port=8080# ?????spring.datasource.url=jdbc:mysql://localhost:3306/teacher_student_management?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis??mybatis.mapper-locations=classpath:mapper/*.xmlmybatis.type-aliases-package=com.qcby.domain# Thymeleaf??spring.thymeleaf.cache=falsespring.thymeleaf.mode=HTML5spring.thymeleaf.encoding=UTF-8spring.thymeleaf.servlet.content-type=text/html# ????logging.level.com.example.mapper=debug