当前位置: 首页 > news >正文

springboot 整合Mybatis-Plus分页、自动填充功能

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 测试结果如图所示
在这里插入图片描述
-----------------------------------------------------------------------~~~~ ----------------------
在这里插入图片描述

相关文章:

  • Android源码面试宝典之JobScheduler从使用到原理分析(二)【JSS的启动】
  • 锂电池充电的同时也能放电吗?
  • Day919.生产就绪 -SpringBoot与K8s云原生微服务实践
  • 区块链系统:挖矿原理
  • 定时执行专家V6.7发布,增加标签自由分组功能 —— Tag feature for TimingExecutor
  • ICG-PEG-CHO,吲哚菁绿-聚乙二醇-醛基 荧光染料试剂说明
  • 23-基于双层优化的电动汽车优化调度研究
  • 整理了一份github上比较热门的ChatGPT项目,值得收藏
  • 国家认证 | 创邻科技入选“大数据核心产品优秀案例”
  • 【Vue2从入门到精通】Vue监听器watch,计算属性computed,方法methods的区别及使用场景
  • Halcon转OpenCV实例--纺织物折痕检测(附源码)
  • Java开发一年不到,来面试居然敢开口要20K,面完连8K都不想给~
  • vue基础知识大全
  • nginx配置详解
  • Django 发送邮件
  • 【史上最全面esp32教程】网络篇和tcp/ip的使用
  • Playwright的启动参数详情
  • GameFramework之Network网络模块Protobuf工具
  • Golang每日一练(leetDay0014)
  • [刷题]背包问题
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉