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);

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值