Springboot综合练习,使用三层架构,结合Mybatis操作数据库,接收前端发送的请求,并进行对应的逻辑处理,对数据库增删改查
pojo
package com.wzb.pojo20240928;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}
package com.wzb.pojo20240928;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {private Integer code; // 响应码,1是响应成功,2是响应失败private String message; // 响应信息,描述响应结果的字符串private Object data; // 响应返回的数据// 响应成功,但不返回数据的方法public static Result success() {return new Result(1, "success", null);}// 响应成功,并且返回数据的方法public static Result success(Object data) {return new Result(1,"success", data);}// 响应失败的方法public static Result fail(String message) {return new Result(0, message, null);}
}
Controller
package com.wzb.controller20240928;import com.wzb.pojo20240928.PageBean;
import com.wzb.pojo20240928.Result;
import com.wzb.service20240928.EmpService;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;// 分页查询// 之前的查询部门,是直接将查询的结果全部查询出来并且直接展示到页面上,但若当数据库中的数据有很多的时候,就需要分页查询// 每页只展示一页数据:比如一页只展示10条数据,若还想看其他数据,那么通过点击页码进行查询// 分页查询格式:在select后使用limit关键字// limit 开始索引 每页显示的数据条数:若每页10条,// 查询第一页的语句:select * from emp limit 0, 10; (索引是从0开始的)// 查询第二页的语句:select * from emp limit 10, 10;// 观察规律可知,每一页的开始索引一直在改变,但是每页显示的条数是固定的————索引计算公式:开始索引=(当前页码 - 1) * 每页显示的条数// 前端在请求分页查询的时候,应该传递的参数:1.当前页码:page 2.每页的显示条数:pageSize// 后端应该给前端响应的数据:1.查询到的数据列表(存储在List集合中) 2.总记录数// 后端响应的这两部分通常会封装到PageBean对象中,并将该对象转换为json格式的数据返回给浏览器// 阅读接口文档:// 1.请求路径:/emps// 2.请求方式:GET// 3.请求参数:跟随在请求路径后的参数字符串。如:/emps?page=1&pageSize=10// 4.响应数据的格式:json// 条件分页查询@GetMapping// 指定查询的页数(默认是第1页)、每一页的条数(默认每一页10条)public Result pageSelect (@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize) {// “记录日志”System.out.printf("分页查询,参数:查的%d页,这一页有%d条", page, pageSize);// 调用业务层(Service)分页查询功能PageBean pageBean = empService.pageSelect(page, pageSize);// 响应return Result.success(pageBean);// 直接写分页查询的代码弊端:1.过于繁琐 2.安全性不高(SQL注入)// 可以使用Mybatis中的PageHelper分页插件完成分页查询的操作// 在执行empMapper.pageSelect方法时,只需要执行select * from emp,就可以完成分页查询// 分页查询帮我们完成了以下操作:// 1.先将SQL语句的:select * from emp中的字段列表变成:count(*)// 2.执行:select count(*) from emp 获取到总记录数// 3.然后再对:select * from emp改造,在末尾添加limit// 4.然后执行改造后的SQL:select * from emp limit……// 使用PageHelper分页插件进行分页查询,无需再对Mapper中进行手动分页,在Mapper中只需要正常的列表查询即可// 在Service层中,调用Mapper方法之前设置分页参数,在调用Mapper方法执行查询之后,解析分页结果,并封装到PageBean对象中返回}
}
Service
package com.wzb.service20240928;import com.wzb.pojo20240928.PageBean;public interface EmpService {public PageBean pageSelect(Integer page, Integer pageSize);
}
package com.wzb.service20240928;import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.wzb.mapper20240928.EmpMapper;
import com.wzb.pojo20240928.Emp;
import com.wzb.pojo20240928.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class EmpServiceImplement implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean pageSelect(Integer page, Integer pageSize) {
// // 获取总记录数
// Long count = empMapper.countItem();
//
// // 获取分页查询的结果列表
// Integer start = (page - 1) * pageSize;
// List<Emp> empList = empMapper.pageSelect(start, pageSize);// 设置分页参数PageHelper.startPage(page, pageSize);// 执行分页查询Integer start = (page - 1) * pageSize;List<Emp> empList = empMapper.pageSelect(start, pageSize);// 获取分页结果Page<Emp> p = (Page<Emp>) empList;return new PageBean(p.getTotal(), p.getResult());}
}
Mapper
package com.wzb.mapper20240928;import com.wzb.pojo20240928.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface EmpMapper {// 获取总记录数
// @Select("select count(*) from emp")
// public Long countItem();
//
// // 获取当前页的查询列表结果
// @Select("select * from emp limit #{start}, #{pageSize}")
// public List<Emp> pageSelect(Integer start, Integer pageSize);@Select("select * from emp")public List<Emp> pageSelect(Integer start, Integer pageSize);}