前言:
通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。
正片
java">@Data public class RequestPageEntity { /** * id,username,roleId,lastLogin 数据库表 * into,Max 分页查询映射参数 */ private int id; private String username; private int roleId; private Date lastLogin; private Integer into; private int Max; public Integer getPageBegin(){ return (this.into - 1) * Max; } }
这是专业版 · 改的实体类模板
由数据库表和分页参数组成
那我们每做一次分页,岂不是都要写数据库表和分页参数
最终测试版,首先优化的就是这个
我们将数据库表和分页分成两个实体类
java">@Data public class RequestPageEntity { /** * 统一分页参数实体类 */ private Integer into; private int Max; public Integer getPageBegin(){ return (this.into - 1) * Max; } }
java">@Data public class UserPageEntity extends RequestPageEntity{ /** * 数据库实体类 */ private int id; private String username; private int roleId; private Date lastLogin; }
我们只需要通过继承,就可以省去分页实体类那部分代码,还能获取分页实体类的属性,一举三得
这是剩余内容的模板
真 · 正片(九步法实现分页功能)
第一步:创建基础分页实体类(用于java映射sql的参数传输OR简单来说,这个类,提供了对sql语句参数的支持)
java">import lombok.Data; @Data public class RequestPageEntity { /** * 统一分页参数实体类 */ private Integer into; private int Max; public Integer getPageBegin(){ return (this.into - 1) * Max; } }
第二步:创建需要分页查询的实体类
java">import lombok.Data; @Data public class xxx类 extends RequestPageEntity{ /** * 数据库表实体类 * 只需要继承,就可以省去一大部分的代码 * 具体内容实现在下 */ }
第三步:创建java映射层 简称 mapper层
java">import org.apache.ibatis.annotations.Mapper; import org.example.mybatis.entity.RequestPageEntity; import java.util.List; @Mapper public interface xxxMapper { List<xxxEntity> requestPage(xxxEntity xxx); }
第四步:创建mybatis映射器(用于连接Java和Sql)
java"><?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="java映射具体路径,mapper层具体映射"> </mapper>
第五步:创建java和sql的具体映射(java方法 对应 sql语句)
<select id="java映射分页方法名" resultType="具体实体类路径"> select * from 数据库表 limit #{pageBegin},#{Max} # 注意大小写,getBig在进入mybatis映射器中会变成big </select>
第六步:创建业务层
java">import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @Service public class UserPageServer { @Resource xxxMapper xxxMapper; public List<xxxEntity> USerPage(xxxEntity xxx){ return xxxMapper.requestPage(xxx); } }
第七步:创建控制层
java">@RestController public class test { @Resource xxxService xxxService @GetMapping("/page") public String SelectByAll(xxxEntity xxx){ return "打印成功" + xxxService.查询方法(xxx); } }
第八步:测试
第九步:完成分页功能
实战
采用的示例数据库表
第一步:复制不变(你想变也可以)
java"> import lombok.Data; @Data public class RequestPageEntity { /** * 统一分页参数实体类 */ private Integer into; private int Max; public Integer getPageBegin(){ return (this.into - 1) * Max; } }
实战
java">import lombok.Data;
@Data
public class RequestPageEntity {
/**
* 统一分页参数实体类
*/
private Integer into;
private int Max;
public Integer getPageBegin(){
return (this.into - 1) * Max;
}
}
第二步:创建实体类并继承统一分页实体类
java">import lombok.Data; @Data public class xxx类 extends RequestPageEntity{ /** * 数据库表实体类 * 只需要继承,就可以省去一大部分的代码 * 具体内容实现在下 */ }
实战
java">import lombok.Data;
import java.util.Date;
@Data
public class UserPageEntity extends RequestPageEntity{
/**
* 数据库表实体类
* 只需要继承,就可以省去一大部分的代码
* 具体内容实现在下
*/
private int id;
private String username;
private int roleId;
private Date lastLogin;
}
第三步:创建java映射层 简称 mapper层
java">import org.apache.ibatis.annotations.Mapper; import org.example.mybatis.entity.RequestPageEntity; import java.util.List; @Mapper public interface xxxMapper { List<xxxEntity> requestPage(xxxEntity xxx); }
实战
java">import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.entity.RequestPageEntity;
import java.util.List;
@Mapper
public interface RequestPageMapper {
List<UserPageEntity> requestPage(UserPageEntity user);
}
第四步:创建mybatis映射器(用于连接Java和Sql)
java"><?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="java映射具体路径,mapper层具体映射"> </mapper>
实战
java"><?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="org.example.mybatis.Mapper.RequestPageMapper">
</mapper>
第五步:创建java和sql的映射
<select id="java映射分页方法名" resultType="具体实体类路径"> select * from 数据库表 limit #{pageBegin},#{Max} # 注意大小写,getBig在进入mybatis映射器中会变成big </select>
<mapper namespace="org.example.mybatis.Mapper.RequestPageMapper">
<select id="requestPage" resultType="org.example.mybatis.entity.UserPageEntity">
select * from user limit #{pageBegin},#{Max}
# 注意大小写,getBig在进入mybatis映射器中会变成big
</select>
完整的映射
<?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="org.example.mybatis.Mapper.RequestPageMapper">
<select id="requestPage" resultType="org.example.mybatis.entity.UserPageEntity">
select * from user limit #{pageBegin},#{Max}
# 注意大小写,getBig在进入mybatis映射器中会变成big
</select>
</mapper>
第六步:创建业务
java">import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @Service public class UserPageServer { @Resource xxxMapper xxxMapper; public List<xxxEntity> USerPage(xxxEntity xxx){ return xxxMapper.requestPage(xxx); } }
实战
java">@Service
public class UserPageServer {
@Resource
RequestPageMapper requestPageMapper;
public List<UserPageEntity> USerPage(UserPageEntity userPageEntity){
return requestPageMapper.requestPage(userPageEntity);
}
}
第七步:创建控制类
java">@RestController public class test { @Resource xxxService xxxService @GetMapping("/page") public String SelectByAll(xxxEntity xxx){ return "打印成功" + xxxService.查询方法(xxx); } }
实战
java">@RestController
public class test {
@Resource
UserPageServer userPageServer;
@GetMapping("/page")
public String SelectByAll(UserPageEntity userPageEntity){
return "打印成功" + userPageServer.USerPage(userPageEntity);
}
}
完结
其中的疑问
第一个:关于映射器中sql是如何读取到
java"> public Integer getPageBegin(){ return (this.into - 1) * Max; }
mybatis会自动映射,将getPageBegin自动转换成pageBegin(这个为结论)
第二个:如果自定义,xxx,这些xxx为自定义内容