mybatis-plus 4 其他特性

前言

上一章节解读了 MP条件构造器,本章节继续解读 MP 的其他特性

分页插件

Springboot 下的分页,以 bean 的形式注册 分页插件

	@Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

则使用对应 IService 接口的 page 相关方法即可

	// 带条件
	default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {
        return this.getBaseMapper().selectPage(page, queryWrapper);
    }

	// 不带条件
    default <E extends IPage<T>> E page(E page) {
        return this.page(page, Wrappers.emptyWrapper());
    }

	default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper) {
        return this.getBaseMapper().selectMapsPage(page, queryWrapper);
    }

    default <E extends IPage<Map<String, Object>>> E pageMaps(E page) {
        return this.pageMaps(page, Wrappers.emptyWrapper());
    }

示例 demo

	/**
     * 表中共三条数据
     */
    @Test
    public void testPage() {
        Page<User> page = userService.page(
                new Page<>(1, 2)
                //, new QueryWrapper<>(new User("1", null, null)).eq("age", 1)
        );
        page.getRecords().forEach(System.out::println);
        // User(id=1, name=u3, age=1, email=1) User(id=2, name=2, age=2, email=2)

        System.out.println(page.getPages()); // 2
        System.out.println(page.getTotal()); // 3
        System.out.println(page.getSize()); // 2
        System.out.println(page.getCurrent()); // 1
    }

主键序列

@Data
@EqualsAndHashCode(callSuper = false)
// 自己添加无参构造
@NoArgsConstructor
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String name;

    private Integer age;

    private String email;

    // 自己添加的构造方法
    public User(String name, Integer age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
}

这是我们之前生成的实体类,要想自定义 主键序列 ,首先要修改主键的 type 属性值为 INPUT

MP 内置如下 序列生成类

  • DB2KeyGenerator
  • H2KeyGenerator
  • KingbaseKeyGenerator
  • OracleKeyGenerator
  • PostgreKeyGenerator

我们也可实现 IKeyGenerator 接口来进行扩展,如下我们注入 DB2KeyGenerator 实例,则主键自增

@Bean
public IKeyGenerator keyGenerator() {
    return new DB2KeyGenerator();
}

------------------DB2KeyGenerator 源码---------------------

public class DB2KeyGenerator implements IKeyGenerator {
    public DB2KeyGenerator() {
    }

	// 自增
    public String executeSql(String incrementerName) {
        return "values nextval for " + incrementerName;
    }
}

自定义主键

MP 内置 雪花算法 + UUID(不含中划线),自定义拓展则实现 IdentifierGenerator 接口即可

修改主键的字段类型为 String(Varchar),修改主键注解 type 属性值为 ASSIGN_UUID 即可,不做演示

总结

除此之外,MP 还拓展了很多插件功能,比如 逻辑删除、乐观锁、多租户 等等,功能都十分强大。本文花了四个章节,也只是讲解了 MP 强大功能的 凤毛麟角,对于其 源码 更是几乎没有深入,使用起来如此轻便想必其实现也是十分巧妙,如果有机会,可以学习源码再深入了解下

关于其他更多的特性,如果感兴趣,可以直接上官网了解

https://mybatis.plus/

上一篇:mybatis-plus 3 条件构造器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值