0-1搭建springboot+vue的教务管理系统(核心源码)

 

目录

后端核心代码:

control层

service 层

mapper层


 

后端核心代码:

control层:

classControlsImpl
package com.itheima.controls.impl;import com.itheima.mapper.ClassMapper;
import com.itheima.pojo.Clazz;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageResult;
import com.itheima.pojo.Result;
import com.itheima.service.ClassService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;import java.beans.PropertyEditorSupport;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;@RestController
@RequestMapping("/clazzs")
public class ClassControlsImpl {private static final Logger log = LoggerFactory.getLogger(DeptControlsImpl.class);@Autowiredprivate ClassService classService;@InitBinderpublic void initBinder(WebDataBinder binder) {binder.registerCustomEditor(LocalDate.class, new PropertyEditorSupport() {@Overridepublic void setAsText(String text) throws IllegalArgumentException {if (text == null || text.trim().isEmpty()) {setValue(null);} else {try {setValue(LocalDate.parse(text.trim(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));} catch (DateTimeParseException e) {throw new IllegalArgumentException("Invalid date format: " + text);}}}});}@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){log.info("分页查询:{}{}{},,,,,;,{}{}{}",page,pageSize,name,begin,end);PageResult<Clazz> pageResult =classService.page(page,pageSize,name,begin,end);return Result.success(pageResult);}@DeleteMapping("/{id}")public Result deleteById(@PathVariable Integer id){classService.deleteById(id);return Result.success();}@PostMappingpublic Result insert(@RequestBody Clazz clazz){log.info("要添加的班级信息",clazz);classService.insert(clazz);return Result.success();}@GetMapping("/{id}")public Result getInfo(@PathVariable Integer id){log.info("查询回显返回的id为:{}",id);Clazz clazz = classService.getInfo(id);return Result.success(clazz);}@PutMappingpublic Result update(@RequestBody Clazz clazz){log.info("要修改的数据为:{}",clazz);classService.update(clazz);return Result.success();}@GetMapping("/list")public Result selectList(){List<Clazz> clazz = classService.selectList();return Result.success(clazz);}
}deptControlsImpl
package com.itheima.controls.impl;import com.itheima.anno.Log;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
public class DeptControlsImpl {private static final Logger log = LoggerFactory.getLogger(DeptControlsImpl.class);@Autowiredprivate DeptService deptservice;@GetMapping("/depts")public Result list(){
//        System.out.println("查看全部部门数据");log.info("查看全部数据");List<Dept> depts = deptservice.findAll();return Result.success(depts);}// 通过id删除@Log@DeleteMapping("/depts")public Result deleteById(Integer id){log.info("要删除的部门id:{}",id);deptservice.deleteById(id);return Result.success();}// 通过前端传的部门名称(namne)添加数据、@Log@PostMapping("/depts")public Result add(@RequestBody Dept dept){log.info("要添加的部门:{}",dept);deptservice.add(dept);return Result.success();}// 通过点击要修改的部门让后端返回前端要修改的部门信息// id回显@GetMapping("/depts/{id}")public Result getInfo(@PathVariable Integer id){Dept dept = deptservice.getInfo(id);return Result.success(dept);}@Log@PutMapping("/depts")public Result update(@RequestBody Dept dept){log.info("要更新的部门:{}",dept);deptservice.update(dept);return Result.success();}
}
EmpControlsImpl
package com.itheima.controls.impl;import com.itheima.pojo.Emp;
import com.itheima.pojo.PageResult;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;import java.beans.PropertyEditorSupport;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;@RequestMapping("/emps")
@RestController
public class EmpControlsImpl {@Autowiredprivate EmpService empService;// 日志// private static final Logger log = LoggerFactory.getLogger(EmpControlsIMpl.class);private static final Logger log = LoggerFactory.getLogger(EmpControlsImpl.class);// 处理前端传回来的日期格式转换@InitBinderpublic void initBinder(WebDataBinder binder) {binder.registerCustomEditor(LocalDate.class, new PropertyEditorSupport() {@Overridepublic void setAsText(String text) throws IllegalArgumentException {if (text == null || text.trim().isEmpty()) {setValue(null);} else {try {setValue(LocalDate.parse(text.trim(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));} catch (DateTimeParseException e) {throw new IllegalArgumentException("Invalid date format: " + text);}}}});}@GetMappingpublic Result page(@RequestParam Integer page, @RequestParam Integer pageSize,@RequestParam String name,@RequestParam(required = false) Integer gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){log.info("分页查询:{}{}{}{}{}{}",page,pageSize,name,gender,begin,end);PageResult<Emp> pageResult = empService.page(page,pageSize,name,gender,begin,end);log.info("hahaha{}",pageResult);return Result.success(pageResult);}@PostMappingpublic Result save(@RequestBody Emp emp){log.info("要添加的数据{}",emp);empService.save(emp);return Result.success();}@DeleteMappingpublic Result deleteByIds(@RequestParam List<Integer> ids){log.info("要删除的id为{}",ids);empService.deleteByIds(ids);return Result.success();}@GetMapping("/{id}")public Result getInfo(@PathVariable Integer id){log.info("根据回显查询的员工id:{}",id);Emp emp = empService.getInfo(id);log.info("要修改的数据为:{}",emp);return Result.success(emp);}@PutMappingpublic Result update(@RequestBody Emp emp){log.info("要修改的数据为:{}",emp);empService.update(emp);return Result.success();}//////////////////////////@GetMapping("/list")public Result select(){List<Emp> emp = empService.select();log.info("查询所有员工信息{}",emp);return Result.success(emp);}}
LoginCOntrolsImpl
package com.itheima.controls.impl;import com.itheima.pojo.Emp;
import com.itheima.pojo.LoginInfo;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LoginControlsImpl {private static final Logger log = LoggerFactory.getLogger(EmpControlsImpl.class);@Autowiredprivate EmpService empService;@PostMapping("/login")public Result login(@RequestBody Emp emp){log.info("登录:{}",emp);LoginInfo loginInfo = empService.login(emp);if (loginInfo != null){return Result.success(loginInfo);}return Result.error("用户名或者密码错误");}}
ReportControlsImpl
package com.itheima.controls.impl;import com.itheima.pojo.JobOption;
import com.itheima.pojo.Result;
import com.itheima.pojo.StudentOption;
import com.itheima.service.ReportService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/report")
public class ReportControlsImpl {@Autowiredprivate ReportService reportService;private static final Logger log = LoggerFactory.getLogger(EmpControlsImpl.class);@GetMapping("/empJobData")public Result getEmpJobData(){log.info("统计员工职位人数");JobOption jobOption = reportService.getEmpJobData();return Result.success(jobOption);}@GetMapping("/empGenderData")public Result getEmpGenderData(){log.info("统计员工性别人数");List<Map<String,Object>> mapList = reportService.getEmpGenderData();return Result.success(mapList);}@GetMapping("/studentCountData")public Result getStudentMessageData(){log.info("学员信息统计");StudentOption studentOption = reportService.getStudentMessageData();return Result.success(studentOption);}@GetMapping("/studentDegreeData")public Result getStudentDegreeData(){log.info("学院学历统计");List<Map<String,Object>> mapList = reportService.getStudentDegreeData();return Result.success(mapList);}
}StudentControlsImpl
package com.itheima.controls.impl;import com.itheima.pojo.PageResult;
import com.itheima.pojo.Result;
import com.itheima.pojo.Student;
import com.itheima.service.StudentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RequestMapping("/students")
@RestController
public class StudentControlsImpl {@Autowiredprivate StudentService studentService;private static final Logger log = LoggerFactory.getLogger(EmpControlsImpl.class);@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name,Integer degree,Integer clazzId){log.info("分页查询:{}{}{}{}{}{}",page,pageSize,name,degree,clazzId);PageResult<Student> pageResult = studentService.page(page,pageSize,name,degree,clazzId);return Result.success(pageResult);}@PostMappingpublic Result insert(@RequestBody Student student){log.info("前端添加的学生信息:{}",student);studentService.insert(student);return Result.success();}@GetMapping("/{id}")public Result getInfo(@PathVariable Integer id){log.info("id回显的数据是:{}",id);Student student = studentService.getInfo(id);return Result.success(student);}@PutMappingpublic Result update(@RequestBody Student student){log.info("要修改的学生信息:{}",student);studentService.update(student);return Result.success();}@DeleteMapping("/{ids}")public Result deleteByIds(@PathVariable List<Integer> ids){log.info("要删除的学生id为:{}",ids);studentService.deleteByIds(ids);return Result.success();}@PutMapping("/violation/{id}/{score}")public Result violent(@PathVariable Integer id,@PathVariable Integer score){log.info("传进来的要处理的违纪信息为:{},{}",id,score);studentService.violent(id,score);return Result.success();}
}
UploadControlsImpl
package com.itheima.controls.impl;import com.itheima.pojo.Result;
import com.itheima.utils.AliyunOSSOperator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@RestController
public class UploadControlsImpl {private static final Logger log = LoggerFactory.getLogger(EmpControlsImpl.class);@Autowiredprivate AliyunOSSOperator aliyunOSSOperator;
//    本地磁盘存储方案
//    @PostMapping("/upload")
//    public Result upload(String name, Integer age, MultipartFile file) throws IOException {
//        log.info("接收参数:{},{},{}",name,age,file);
//        String originalFilename = file.getOriginalFilename();
//        String newFileName = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
//        file.transferTo(new File("D:/image/" + newFileName));
//        return Result.success();
//    }@PostMapping("/upload")public Result upload(MultipartFile file) throws Exception{log.info("文件上传:{}",file.getOriginalFilename());String url = aliyunOSSOperator.upload(file.getBytes(),file.getOriginalFilename());log.info("文件上传OSS,url:{}",url);return Result.success(url);}
}

service 层

package com.itheima.service.impl;import com.itheima.exception.ClassNotEmptyException;
import com.itheima.mapper.ClassMapper;
import com.itheima.mapper.EmpMapper;
import com.itheima.mapper.StudentMapper;
import com.itheima.pojo.Clazz;
import com.itheima.pojo.PageResult;
import com.itheima.service.ClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;@Service
public class ClassServiceImpl implements ClassService {@Autowiredprivate ClassMapper classMapper;@Autowiredprivate EmpMapper empMapper;@Autowiredprivate StudentMapper studentMapper;
//    @Transactional(rollbackFor = {Exception.class})@Overridepublic PageResult<Clazz> page(Integer page, Integer pageSize, String name, LocalDate begin, LocalDate end) {Integer start = (page-1)*pageSize;Long total = classMapper.total(name,begin,end);List<Clazz> rows = classMapper.page(start,pageSize,name,begin,end);PageResult<Clazz> pageResult = new PageResult<Clazz>(total,rows);pageResult.getRows().forEach(item->{if(LocalDate.now().compareTo(item.getBeginDate())<0){item.setStatus("未开课");} else if (LocalDate.now().compareTo(item.getEndDate())>0) {item.setStatus("已结课");}else {item.setStatus("再读中");}});return pageResult;}@Overridepublic void deleteById(Integer id) {Integer count=0;count = studentMapper.selectById(id);if (count>0) {throw new ClassNotEmptyException("对不起,该班级下有学生,不能删除!");}classMapper.deleteById(id);}@Overridepublic void insert(Clazz clazz) {clazz.setCreateTime(LocalDateTime.now());clazz.setUpdateTime(LocalDateTime.now());classMapper.insert(clazz);}@Overridepublic Clazz getInfo(Integer id) {return classMapper.getInfo(id);}@Overridepublic void update(Clazz clazz) {clazz.setUpdateTime(LocalDateTime.now());classMapper.update(clazz);}@Overridepublic List<Clazz> selectList() {return classMapper.selectList();}
}
////////////////////////////////////////////
package com.itheima.service.impl;import com.itheima.exception.ClassNotEmptyException;
import com.itheima.mapper.ClassMapper;
import com.itheima.mapper.EmpMapper;
import com.itheima.mapper.StudentMapper;
import com.itheima.pojo.Clazz;
import com.itheima.pojo.PageResult;
import com.itheima.service.ClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;@Service
public class ClassServiceImpl implements ClassService {@Autowiredprivate ClassMapper classMapper;@Autowiredprivate EmpMapper empMapper;@Autowiredprivate StudentMapper studentMapper;
//    @Transactional(rollbackFor = {Exception.class})@Overridepublic PageResult<Clazz> page(Integer page, Integer pageSize, String name, LocalDate begin, LocalDate end) {Integer start = (page-1)*pageSize;Long total = classMapper.total(name,begin,end);List<Clazz> rows = classMapper.page(start,pageSize,name,begin,end);PageResult<Clazz> pageResult = new PageResult<Clazz>(total,rows);pageResult.getRows().forEach(item->{if(LocalDate.now().compareTo(item.getBeginDate())<0){item.setStatus("未开课");} else if (LocalDate.now().compareTo(item.getEndDate())>0) {item.setStatus("已结课");}else {item.setStatus("再读中");}});return pageResult;}@Overridepublic void deleteById(Integer id) {Integer count=0;count = studentMapper.selectById(id);if (count>0) {throw new ClassNotEmptyException("对不起,该班级下有学生,不能删除!");}classMapper.deleteById(id);}@Overridepublic void insert(Clazz clazz) {clazz.setCreateTime(LocalDateTime.now());clazz.setUpdateTime(LocalDateTime.now());classMapper.insert(clazz);}@Overridepublic Clazz getInfo(Integer id) {return classMapper.getInfo(id);}@Overridepublic void update(Clazz clazz) {clazz.setUpdateTime(LocalDateTime.now());classMapper.update(clazz);}@Overridepublic List<Clazz> selectList() {return classMapper.selectList();}
}
//////////////////////////////////////////////////
package com.itheima.service.impl;import com.itheima.mapper.EmpLogMapper;
import com.itheima.pojo.EmpLog;
import com.itheima.service.EmpLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;@Transactional(propagation = Propagation.REQUIRES_NEW)
@Service
public class EmpLogServiceImpl implements EmpLogService {@Autowiredprivate EmpLogMapper empLogMapper;@Overridepublic void insertLog(EmpLog empLog) {empLogMapper.insert(empLog);}
}
///////////////////////////////////////////////////
package com.itheima.service.impl;import com.itheima.mapper.EmpLogMapper;
import com.itheima.pojo.EmpLog;
import com.itheima.service.EmpLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;@Transactional(propagation = Propagation.REQUIRES_NEW)
@Service
public class EmpLogServiceImpl implements EmpLogService {@Autowiredprivate EmpLogMapper empLogMapper;@Overridepublic void insertLog(EmpLog empLog) {empLogMapper.insert(empLog);}
}
////////////////////////////////////////////////////////
package com.itheima.service.impl;import com.itheima.mapper.OperateMapper;
import com.itheima.pojo.OperateLog;
import com.itheima.pojo.PageResult;
import com.itheima.service.OperateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class OperateLogServiceImpl implements OperateService {@Autowiredprivate OperateMapper operateMapper;@Overridepublic PageResult<OperateLog> selectLogList(Integer page, Integer pageSize) {Long total = Long.valueOf(operateMapper.total());Integer start = (page-1)*pageSize;List<OperateLog> operateLogs = operateMapper.selectLogs(start,pageSize);return new PageResult<>(total,operateLogs);}
}
//////////////////////////////////////////////////package com.itheima.service.impl;import com.itheima.mapper.EmpMapper;
import com.itheima.mapper.StudentMapper;
import com.itheima.pojo.JobOption;
import com.itheima.pojo.StudentOption;
import com.itheima.service.EmpService;
import com.itheima.service.ReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;@Service
public class ReportServiceImpl implements ReportService {@Autowiredprivate EmpMapper empMapper;@Autowiredprivate StudentMapper studentMapper;@Overridepublic JobOption getEmpJobData() {List<Map<String,Object>> list = empMapper.countEmpJobData();List<Object> keyList = list.stream().map(item->item.get("jobName")).toList();List<Object> valueList = list.stream().map(item->item.get("count")).toList();return new JobOption(keyList,valueList);}@Overridepublic List<Map<String, Object>> getEmpGenderData() {return empMapper.countEmpGenderData();}@Overridepublic StudentOption getStudentMessageData() {List<Map<String,Object>> list = studentMapper.getStudentMessageData();List<Object> listKeys = list.stream().map(item->item.get("name")).toList();List<Object> listValues = list.stream().map(item->item.get("count")).toList();return new StudentOption(listKeys,listValues);}@Overridepublic List<Map<String, Object>> getStudentDegreeData() {return studentMapper.getStudentDegreeData();}
}///////////////////////////////////////////////
package com.itheima.service.impl;import com.itheima.mapper.StudentMapper;
import com.itheima.pojo.PageResult;
import com.itheima.pojo.Student;
import com.itheima.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.util.List;@Service
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentMapper studentMapper;@Overridepublic PageResult<Student> page(Integer page, Integer pageSize, String name, Integer degree, Integer clazzId) {Long total = studentMapper.total(name,degree,clazzId);Integer start = (page-1)*pageSize;List<Student> students = studentMapper.page(start,pageSize,name,degree,clazzId);return new PageResult<Student>(total,students);}@Overridepublic void insert(Student student) {student.setUpdateTime(LocalDateTime.now());student.setCreateTime(LocalDateTime.now());studentMapper.insert(student);}@Overridepublic Student getInfo(Integer id) {return studentMapper.getInfo(id);}@Overridepublic void update(Student student) {student.setUpdateTime(LocalDateTime.now());studentMapper.update(student);}@Overridepublic void deleteByIds(List<Integer> ids) {studentMapper.deleteByIds(ids);}@Overridepublic void violent(Integer id,Integer score) {Student student = studentMapper.selectStudentViolentMessage(id);student.setViolationCount((short) (student.getViolationCount()+1));student.setViolationScore((short) (student.getViolationScore()+score));studentMapper.update(student);}
}

mapper: 

package com.itheima.mapper;import com.itheima.pojo.Clazz;
import com.itheima.pojo.PageResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.time.LocalDate;
import java.util.List;@Mapper
public interface ClassMapper {@Select("SELECT COUNT(c.id) FROM clazz c " +"WHERE (c.name LIKE CONCAT('%', #{name}, '%') OR #{name} IS NULL) " +"AND (c.begin_date BETWEEN #{begin} AND #{end} OR (#{begin} IS NULL AND #{end} IS NULL))")Long total(String name, LocalDate begin, LocalDate end);List<Clazz> page(Integer start, Integer pageSize, String name, LocalDate begin, LocalDate end);void deleteById(Integer id);void insert(Clazz clazz);Clazz getInfo(Integer id);void update(Clazz clazz);List<Clazz> selectList();
}
//////////////////////////////////////////////
package com.itheima.mapper;import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface DeptMapper {@Select("select * from dept order by update_time desc")public List<Dept> findAll();// 删除员工@Delete("delete from dept where id=#{id}")public void deleteById(Integer id);// 通过前端返回的部门信息添加部门@Insert("insert into dept (name,create_time,update_time) values (#{name},#{createTime},#{updateTime})")void add(Dept dept);// 回显查询@Select("select * from dept where id=#{id}")Dept getInfo(Integer id);// 修改数据@Update("update dept set name=#{name},update_time=#{updateTime} where id=#{id}")void update(Dept dept);}////////////////////////////////////////////////////////////
package com.itheima.mapper;import com.itheima.pojo.EmpExpr;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface EmpExprMapper {public void insertBatch(List<EmpExpr> exprList);void deleteByEmpIds(List<Integer> ids);
}
///////////////////////////////////////////////////////////////////
package com.itheima.mapper;import com.itheima.pojo.EmpLog;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;@Mapper
public interface EmpLogMapper {@Insert("insert into emp_log (operate_time, info) values (#{operateTime}, #{info})")public void insert(EmpLog empLog);}
//////////////////////////////////////////////////////////////////
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;import java.time.LocalDate;
import java.util.List;
import java.util.Map;@Mapper
public interface EmpMapper {@Select("SELECT COUNT(*) FROM emp e " +"LEFT JOIN dept d ON e.dept_id = d.id " +"WHERE (e.name LIKE CONCAT('%', #{name}, '%') OR #{name} IS NULL) " +"AND (e.gender = #{gender} OR #{gender} IS NULL) " +"AND (e.entry_date BETWEEN #{begin} AND #{end} " +"     OR (#{begin} IS NULL AND #{end} IS NULL))")public Long count(String name, Integer gender, LocalDate begin,LocalDate end);
//    @Select("select e.*,d.name deptName from emp e left join dept d on e.dept_id=d.id where e.name like concat('%',#{name},'%') and e.gender=#{gender} and e.entry_date between #{begin} and #{end} order by e.entry_date DESC limit #{start},#{pageSize}")public List<Emp> list(Integer start, Integer pageSize, String name, Integer gender, LocalDate begin,LocalDate end);
// 主键返回@Options(useGeneratedKeys = true,keyProperty = "id")@Insert("insert into emp(username,name,gender,phone,job,salary,image,entry_date,dept_id,create_time,update_time) values (#{username},#{name},#{gender},#{phone},#{job},#{salary},#{image},#{entryDate},#{deptId},#{createTime},#{updateTime})")public void insert(Emp emp);void deleteByIds(List<Integer> ids);Emp getInfo(Integer id);void updateEmp(Emp emp);@MapKey("jobName")List<Map<String,Object>> countEmpJobData();@MapKey("name")List<Map<String, Object>> countEmpGenderData();///////////////////////////////////////////// 学生管理List<Emp> select();Integer selectDeptStudentMessage(Integer id);Emp selectByUsernameAndPassword(Emp emp);
}/////////////////////////////////////////////////////
package com.itheima.mapper;import com.itheima.pojo.OperateLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface OperateMapper {void deleteLog(List<Integer> ids);@Select("select count(*) from operate_log")Integer total();@Select("select o.id,o.operate_emp_id,o.operate_time,o.class_name,o.method_name,o.method_params,o.return_value,o.cost_time,e.name as operateEmpName from operate_log o left join emp e on e.id = o.operate_emp_id limit #{start},#{pageSize}")List<OperateLog> selectLogs(Integer start, Integer pageSize);
}
////////////////////////////////////////////////////////////////////
package com.itheima.mapper;import com.itheima.pojo.Student;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;
import java.util.Map;@Mapper
public interface StudentMapper {// 删除判断Integer selectById(Integer id);@Select("SELECT COUNT(*) FROM student " +"WHERE (#{name} IS NULL OR name LIKE CONCAT('%', #{name}, '%')) " +"AND (#{degree} IS NULL OR degree = #{degree}) " +"AND (#{clazzId} IS NULL OR clazz_id = #{clazzId})")Long total(String name, Integer degree, Integer clazzId);List<Student> page(Integer start, Integer pageSize, String name, Integer degree, Integer clazzId);@Insert("insert into student(name,no,gender,phone,id_card,is_college," +"address,degree,graduation_date,clazz_id" +",create_time,update_time) values (#{name},#{no}," +"#{gender},#{phone},#{idCard},#{isCollege},#{address},#{degree},#{graduationDate}," +"#{clazzId},#{createTime},#{updateTime})")void insert(Student student);Student getInfo(Integer id);void update(Student student);void deleteByIds(List<Integer> ids);Student selectStudentViolentMessage(Integer id);@MapKey("name")List<Map<String, Object>> getStudentMessageData();@MapKey("name")List<Map<String, Object>> getStudentDegreeData();
}

需要源码的评论区扣666.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89378.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu中man手册不全解决以及man手册中英文切换方法

步入正题之前&#xff0c;先来帮助大家了解一下man手册的作用&#xff0c;让大家对其有更深的理解并充分利用一、man 手册的作用​man 手册&#xff0c;即 manual pages&#xff0c;是 Linux 系统自带的帮助文档系统。通过 man 命令&#xff0c;用户能快速获取系统中几乎所有命…

数据结构----线性表(栈及其栈的实现)C语言 学习笔记

栈&#xff1a;线性逻辑结构栈的分类 顺序栈&#xff1a;顺序存储结构实现的栈链式栈&#xff1a;链式存储结构实现的栈相关概念线性表&#xff1a;可以在任意位置操作栈&#xff1a;对线性表进行约束只能在一端插入和删除操作的线性表&#xff0c;中间不允许操作。栈底&#x…

手滑误操作? vue + Element UI 封装二次确认框 | 附源码

一诺最近在做后台管理系统时&#xff0c;遇到一个很常见但又容易被忽视的小问题&#xff1a;单选框切换时&#xff0c;用户一不小心点错&#xff0c;原有配置就没了&#xff0c;数据丢失&#xff0c;后悔也来不及。你是不是也遇到过类似的场景&#xff1f;比如切换网络模式、切…

力扣刷题367——有效的完全平方数

力扣刷题367——有效的完全平方数&#xff08;69的相似题&#xff09; 题目&#xff1a; 给你一个正整数 num 。如果 num 是一个完全平方数&#xff0c;则返回 true &#xff0c;否则返回 false 。 完全平方数 是一个可以写成某个整数的平方的整数。换句话说&#xff0c;它可以…

kubernetes架构原理与集群环境部署

kubernetes架构原理与集群环境部署概述为什么需要 KubernetesKubernetes 带来的挑战kubernetes架构解析master 节点的组件(1)API server(2)scheduler(3)Controller Manager(4)etcdNode 节点包含的组件(1)容器运行时(2)kubelet(3)kube-proxy代理kubernetes 网络插件(1)Flannel 网…

Python爬虫实战:Requests与Selenium详解

目录 一 网络爬虫的了解 1 爬虫库 urllib库 requests库 scrapy库 selenium库 2 注意&#xff01;&#xff01;&#xff01; 二 requests库 1 request库的安装 2 认识网页资源 3 获取网页资源 4 小案例 5 代理服务器 三 selenium 1 准备工作 2 应用 3 实例 一 网…

什么是乐观锁?什么是悲观锁?

&#x1f512; 深入浅出&#xff1a;乐观锁 vs 悲观锁终极对决&#xff01;面试必考知识点详解 各位CSDN的小伙伴们好呀&#xff01;&#x1f44b; 我是雪碧聊技术&#xff0c;今天给大家带来高并发编程中的核心概念——乐观锁与悲观锁的深度解析&#xff01;&#x1f4bb; 无论…

HTML前端性能优化完整指南

图片优化&#xff1a;性能优化的重中之重 重新审视图片的必要性 在开始优化之前&#xff0c;首先需要思考一个根本问题&#xff1a;要实现预期的视觉效果&#xff0c;真的需要使用图片吗&#xff1f; 随着Web技术的快速发展&#xff0c;许多以往只能通过图片实现的效果&…

数据炼金术:用Python做智能数据整理员

数据炼金术&#xff1a;用Python做智能数据整理员 解锁自动化魔法&#xff1a;文件批量重命名Excel智能清洗数据净化全流程实战 一、数据整理的困境与破局之道 你是否面临这些数据噩梦场景&#xff1f; &#x1f9e9; ​​混乱文件目录​​&#xff1a;最终版_报告_V4(1).doc…

HTML基础P1 | HTML基本元素

HTML标签标签名放在<>中&#xff0c;如<body>大部分标签成对出现&#xff0c;如<h1>为开始标签&#xff0c;</h1>为其对应的结束标签&#xff0c;少数标签只有开始标签&#xff0c;如换行标签<br/>&#xff0c;成为"单标签"有的标签中…

LVS集群搭建

集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统知识点&#xff1a;1.关键术语&#xff1a;VS&#xff1a;Virtual Server&#xff08;调度器&#xff09;RS&#xff1a;Real Server&#xff08;真实服务器&#xff09;CIP&#xff1a;Client IP&#xff08;客户…

吴恩达《AI for everyone》第一周课程笔记

课程的核心目标&#xff1a;- AI是什么&#xff1f; - AI能做什么&#xff1f; - AI最擅长什么类型的任务&#xff1f; - AI怎么做决策&#xff1f; - 企业为什么需要AI战略&#xff1f;导航Machine Learning 机器学习> 最常见的机器学习类型&#xff1a; > 人工智能中最…

iOS App 电池消耗管理与优化 提升用户体验的完整指南

在当今智能手机的使用中&#xff0c;电池寿命和续航能力是用户选择App时的重要考虑因素之一。iOS设备的电池管理功能较为封闭&#xff0c;这也让开发者、产品经理以及普通用户对于App的电池消耗有时无法全面了解。而如果你的App因电池消耗过快而遭到用户卸载&#xff0c;无论功…

关于用git上传远程库的一些常见命令使用和常见问题:

克隆远程库gitee到本地用命令git clone git clone https://gitee.com/automated-piggy-senior/20250717-test.gitLinux/macOS 终端&#xff1a; 执行 touch readme.txt&#xff08;创建空文件&#xff09;&#xff0c;或 echo "这是说明文件" > readme.txt&#…

想删除表中重复数据,只留下一条,sql怎么写

PostgreSQL 方法: DELETE FROM tbl_case_model WHERE id NOT IN (SELECT MIN(id) -- 保留id最小的记录FROM tbl_case_modelGROUP BYcolumn1, -- 替换为实际重复列名column2, -- 继续添加重复列... -- [所有需要比较的列] );因为我这次遇到的情况比较特殊&#xff0…

微服务中token鉴权设计的4种方式

1. JWT鉴权 「概述」&#xff1a;JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。它基于JSON格式&#xff0c;包含三个部分&#xff1a;头部&#xff08;Header&#xff09;、负载&#xff08;Payload&#xff09;和签名&#xff08;Signature&#xff09;。J…

nodejs搭建

1.创建一个空文件夹&#xff0c;在vscode中打开 2.执行命令开启package文件 npm init -y3.设置根目录文件app.js 先执行 npm install express 命令安装 express 模块 执行 npm install cors 命令安装 cors 模块 // app.js const express require(express) const app express…

frp内网穿透(二)

frp内网穿透&#xff08;二&#xff09; 前言 前篇内网穿透 上面一文中已描述如何安装frp进行内网穿透&#xff0c;并配置ssh穿透连接内网服务器&#xff0c;本篇主要介绍如何配置web服务 使用场景 A服务器为公网服务器&#xff0c;B服务器为家庭中内网服务器&#xff0c;且B…

Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践

从 Swagger 2.0 到 OpenAPI 3.0 的升级指南 为什么升级 OpenAPI 3.0提供了更强大的功能、更简洁的配置和更好的性能&#xff0c;同时保持了与 Swagger 2.0 的基本兼容性。本文将详细介绍升级的各个步骤&#xff0c;并提供代码示例。 1. 依赖管理的变化 Swagger 2.0 依赖配置 &l…

用 Flink CEP 打造实时超时预警:从理论到实战

目录 1. Flink CEP 是什么?为什么它能让你的数据“开口说话”? 2. 超时预警的业务场景:从电商到物联网 3. Flink CEP 超时机制的核心原理 3.1 模式匹配与时间窗口 3.2 超时事件的处理 3.3 事件时间与水位线 3.4 核心组件一览 4. 实战案例:电商订单超时预警 4.1 准备…