springboot 整合Mybatis-Plus分页、自动填充功能功能
此次分页、自动填充功能的实现是在Spring Boot整合 druid、Mybatis-plus实现的基础上完成的,包括数据源配置、各种依赖添加、mapper和service的实现。不在重复记录。
Java开发手册要求数据表必须要有三个字段:id字段:自动生成;createtime:记录添加的时间;modifyTime:记录修改的时间。因此可以使用自动填充功能实现后两个字段生成。
1 创建分页插件配置类
在包dzxx.crud.config中创建分页插件配置类:MybatisPlusConfig,并修改数据库的类型。然后添加@configuration和@mapperScan注解,
package dzxx.crud.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//扫描路径为StuMapper文件的路径
@MapperScan("dzxx.crud.repository")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
2 创建分页实体类。
在dzxx.crud.pojo包中创建分页实体类StuVo,存储分页的结果。
package dzxx.crud.pojo;
import lombok.Data;
import java.util.List;
//分页实体类,
@Data
public class StuVo {
private Integer current; //当前页
private Integer size; //每一页的数量
private Long total; //总数
private List<Stu> stuList; //每一页的内容
public StuVo(Integer current, Integer size, Long total, List<Stu> stuList) {
this.current = current;
this.size = size;
this.total = total;
this.stuList = stuList;
}
public StuVo() {
}
}
3 修改Stu实体类的。给createtime和modifytime属性的添加@TableField注解。
package dzxx.crud.pojo;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
@Data
@TableName(value = "stu")
public class Stu {
.。。。。。。
//mybatis-plus自动填充功能
//1,使用注解填充字段生成策略,告知Mybatis-Plus需要预留注入SQL字段
//2.自定义类component-》MyMetaObjectHandler实现接口MetaObjectHandler中的insertFill和updateFill方法
//创建时间:希望在添加数据的时候填充:当前时间
@TableField( fill=FieldFill.INSERT)
private Date currenttime;
//修改时间:希望在添加、修改数据的时候填充:当前时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date modifytime;
。。。。。
}
4 创建自定义类component-》MyMetaObjectHandler实现接口MetaObjectHandler中的insertFill和updateFill方法
package dzxx.crud.component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
// 填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//插入时:创建时间和修改时间
this.setFieldValByName("currenttime", new Date(), metaObject);
this.setFieldValByName("modifytime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
//修改时:修改时间
this.setFieldValByName("modifytime", new Date(), metaObject);
}
}
5 编写测试方法。服务层调用分页方法即可实现分页。
package dzxx.crud;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import dzxx.crud.pojo.Stu;
import dzxx.crud.pojo.StuVo;
import dzxx.crud.service.StuService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class CrudApplicationTests {
@Autowired(required = false)
private StuService stuService;
@Test
void pagewithIservice(){
int current=1;
int size=2;
IPage<Stu> iPage=new Page<>(current, size);
stuService.page(iPage);
StuVo stuVo=new StuVo();
stuVo.setCurrent(current);
System.out.println(iPage.getRecords());
System.out.println("总"+iPage.getTotal());
System.out.println("总页数"+iPage.getPages());
}
@Test
//添加记录,会自动生成添加时间和修改时间
void save(){
Stu stu=new Stu(null,"jackson","2411",22);
stuService.save(stu);
System.out.println(stu);
}
}
4 测试结果如图所示
-----------------------------------------------------------------------~~~~ ----------------------