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
英文地址,請注明出處:http://en.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 準備…