Springboot Mybatis 案列(Emp)
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 {
@Autowired
private 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 {
@Autowired
private EmpMapper empMapper;
@Override
public 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);
}
原文地址:https://blog.csdn.net/Aishangyuwen/article/details/142624232
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!