一、准备工作
二、开发规范
三、开发流程
四、部门管理功能开发
1.查询部门
1.Controller层
- 接收来自前端的请求
- 调用Service查询部门
- 响应数据给前端
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
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.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.logging.Logger;
@Slf4j
@RestController
public class DeptController {
//创建一个固定日志对象
// private static Logger log= (Logger) LoggerFactory.getLogger ( DeptController.class );
@Autowired
private DeptService deptService;
// @RequestMapping(value = "/depts",method = RequestMethod.GET)//指定请求方式为GET
@GetMapping("/depts")
public Result list(){
log.info ( "查询全部部门数据" );//用日志记录
//调用Service查询数据
List<Dept> deptList= deptService.list();
return Result.success (deptList);
}
}
2.Service层
import com.itheima.pojo.Dept;
import java.util.List;
public interface DeptService {
/*
* 查询全部部门数据
* */
List<Dept> list();
}
import com.itheima.mapper.DeptMapper;
import com.itheima.pojo.Dept;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
@Override
public List<Dept> list() {
return deptMapper.list();
}
}
3.Mapper层
import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface DeptMapper {
/**
* 查询全部部门数据的
* @return
*/
@Select ( "select * from dept" )
List<Dept> list();
}
2.前后端联调
3.删除部门
1.Controller层
-
@DeleteMapping
-
@PathVariable:绑定路径参数
@DeleteMapping("/depts/{id}")
public Result delete(@PathVariable Integer id){
log.info ( "根据id删除部门:{}",id );
deptService.delete(id);
return Result.success ();
}
2.Service层
import com.itheima.pojo.Dept;
import java.util.List;
public interface DeptService {
/**
* 查询全部部门数据
* @return
*/
List<Dept> list();
/**
* 删除部门
* @param id
*/
void delete(Integer id);
}
import java.util.List;
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
@Override
public List<Dept> list() {
return deptMapper.list();
}
@Override
public void delete(Integer id) {
deptMapper.delete(id);
}
}
3.Mapper层
import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface DeptMapper {
/**
* 查询全部部门数据的
* @return
*/
@Select ( "select * from dept" )
List<Dept> list();
/**
* 根据ID删除部门
* @param id
*/
@Delete ( "delete from dept where id=#{id}" )
void delete(Integer id);
}
4.新增部门
1.Controller层
/**
* 新增部门
* @param dept
* @return
*/
@PostMapping("/depts")
public Result add(@RequestBody Dept dept){
log.info ( "新增部门:{}",dept );
//调用Service新增部门
deptService.add(dept);
return Result.success ();
}
2.Service层
接口类
import com.itheima.pojo.Dept;
import java.util.List;
public interface DeptService {
/**
* 新增部门
* @param dept
*/
void add(Dept dept);
}
实现类
import com.itheima.mapper.DeptMapper;
import com.itheima.pojo.Dept;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
/**
* 添加部门
* @param dept
*/
@Override
public void add(Dept dept) {
dept.setCreateTime ( LocalDateTime.now () );
dept.setUpdateTime ( LocalDateTime.now () );
deptMapper.insert(dept);
}
}
3.Mapper层
import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface DeptMapper {
/**
* 查询全部部门数据的
* @return
*/
@Select ( "select * from dept" )
List<Dept> list();
/**
* 根据ID删除部门
* @param id
*/
@Delete ( "delete from dept where id=#{id}" )
void delete(Integer id);
/**
* 添加部门
* @param dept
*/
@Insert ( "insert into dept(name,create_time,update_time) values(#{name},#{createTime},#{updateTime}) " )
void insert(Dept dept);
}
4.Controller层优化
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.logging.Logger;
@Slf4j
@RestController
@RequestMapping("/depts")
public class DeptController {
//创建一个固定日志对象
// private static Logger log= (Logger) LoggerFactory.getLogger ( DeptController.class );
@Autowired
private DeptService deptService;
// @RequestMapping(value = "/depts",method = RequestMethod.GET)//指定请求方式为GET
/**
* 查询部门数据
* @return
*/
@GetMapping
public Result list(){
log.info ( "查询全部部门数据" );//用日志记录
//调用Service查询数据
List<Dept> deptList= deptService.list();
return Result.success (deptList);
}
/**
* 根据ID删除部门
* @param id
* @return
*/
@DeleteMapping("/{id}")
public Result delete(@PathVariable Integer id){
log.info ( "根据id删除部门:{}",id );
deptService.delete(id);
return Result.success ();
}
/**
* 新增部门
* @param dept
* @return
*/
@PostMapping
public Result add(@RequestBody Dept dept){
log.info ( "新增部门:{}",dept );
//调用Service新增部门
deptService.add(dept);
return Result.success ();
}
}
5.根据ID查询部门
1.Controller层
/**
* 根据ID查询部门信息
* @param id
* @return
*/
@GetMapping("/{id}")
public Result selectById(@PathVariable Integer id ){
log.info ( "根据ID查询部门",id );
Dept dept =deptService.seletById(id);
return Result.success (dept);
2.Server层
接口类
import com.itheima.pojo.Dept;
import java.util.List;
public interface DeptService {
/**
* 根据ID查询部门
* @param id
* @return
*/
Dept seletById(Integer id);
}
实现类
@Override
public Dept seletById(Integer id) {
Dept dept=deptMapper.selectById(id);
return dept;
}
3.Mapper层
/**
* 根据ID查询部门
* @param id
* @return
*/
@Select ( "select * from dept where id=#{id}" )
Dept selectById(Integer id);
6.修改部门
1.Controller层
@PutMapping
public Result updateDept(@RequestBody Dept dept){
log.info ( "修改部门信息",dept );
deptService.updateDept(dept);
Result result = selectById ( dept.getId () );
return Result.success ();
}
2.Service层
1.接口类
import com.itheima.pojo.Dept;
import java.util.List;
public interface DeptService {
/**
* 修改部门信息
* @param dept
*/
void updateDept(Dept dept);
2.实现类
/**
* 修改部门信息
* @param
* @param
*/
@Override
public void updateDept(Dept dept) {
dept.setUpdateTime ( LocalDateTime.now () );
deptMapper.updateDept ( dept );
}
3.Mapper层
@Update ( "update dept set name =#{name},update_time=now() where id =#{id}" )
void updateDept(Dept dept);
五、员工管理
1.分页查询
1.PageBean类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 分页查询的结果封装类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
private Long total;//总记录数
private List rows;//数据列表
}
2.Controller层
import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page , @RequestParam(defaultValue = "10") Integer pageSize){
log.info ( "分页查询,参数:{},{}" ,page,pageSize);
//调用Service方法进行分页查询
PageBean pageBean= empService.page(page,pageSize);
return Result.success (pageBean);
}
}
3.Service层
import com.itheima.pojo.PageBean;
public interface EmpService {
PageBean page(Integer page, Integer pageSize);
}
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public PageBean page(Integer page, Integer pageSize) {
//1.获取总记录数
long count = empMapper.count ();
//2.获取分页查询的结果列表
Integer start =(page-1)*pageSize;
List<Emp> empList = empMapper.page (start, pageSize );
//3.封装PageBean对象
PageBean pageBean = new PageBean ( count, empList );
return pageBean;
}
}
4.Mapper层
import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface EmpMapper {
/**
* 查询总记录数
* @return
*/
@Select ("select count(*) from emp" )
public long count();
/**
* 分页查询,获取列表数据
* @param start
* @param pageSize
* @return
*/
@Select ( "select * from emp limit #{start},#{pageSize}" )
public List<Emp> page(Integer start,Integer pageSize);
}
2.分页查询插件
@Override
public PageBean page(Integer page, Integer pageSize) {
//1.设置分页参数
PageHelper.startPage ( page,pageSize );
//2.执行查询
List<Emp> empList = empMapper.list ();
Page<Emp> p = (Page<Emp>) empList;
//3.封装PageBean对象
PageBean pageBean = new PageBean ( p.getTotal (), p.getResult () );
return pageBean;
}
3.条件分页查询
1.Controller层
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page , @RequestParam(defaultValue = "10") Integer pageSize,
String name, Short gender,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
log.info ( "分页查询,参数:{},{},{},{}" ,page,pageSize,name,gender,begin,end);
//调用Service方法进行分页查询
PageBean pageBean= empService.page(page,pageSize, name, gender, begin, end);
return Result.success (pageBean);
}
2.Service层
@Override
public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
//1.设置分页参数
PageHelper.startPage ( page,pageSize );
//2.执行查询
List<Emp> empList = empMapper.list (name,gender,begin,end);
Page<Emp> p = (Page<Emp>) empList;
//3.封装PageBean对象
PageBean pageBean = new PageBean ( p.getTotal (), p.getResult () );
return pageBean;
}
3.XML中的动态SQL
<?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.itheima.mapper.EmpMapper">
<select id="list" resultType="com.itheima.pojo.Emp">
select *
from emp
<where>
<if test="name!=null and name!=null">name like concat('%',#{name},'%')</if>
<if test="gender!=null">and gender =#{gender}</if>
<if test="begin!=null and end !=null">
and entrydate between #{begin} and #{end}
</if>
order by update_time desc
</where>
</select>
</mapper>
4.删除员工
1.Controller层
@DeleteMapping("/{ids}")
public Result delete(@PathVariable List<Integer> ids){
log.info ( "批量删除操作,ids:{}",ids );
empService.delete(ids);
return Result.success ();
}
2.Service层
@Override
public void delete(List<Integer> ids) {
/**
* 执行批量删除
*/
empMapper.delete( ids);
}
3.Mapper层
void delete(List<Integer> ids);
4.XML中的动态SQL
<delete id="delete">
delete
from emp
where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>