mybatis-plus 4 其他特性

作者:神秘网友 发布时间:2020-09-09 07:43:51

mybatis-plus 4 其他特性

mybatis-plus 4 其他特性

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 条件构造器

源码

文中的各种测试类、测试方法,源码地址
https://github.com/dangzhicairang/my-cloud.git
mybatis-plus 4 其他特性

mybatis-plus 4 其他特性相关教程

  1. 代理模式 原型模式
  2. MATLAB GUI多界面切换问题及其他相关问题
  3. MyBatis-Plus简单使用——乐观锁插件 (7)
  4. js新特性辨别:let和var的区别及作用域
  5. (.NET进阶八)身份认证与授权/Authrize特性/Filter过滤器
  6. Spring Boot:mybatis-plus + atomikos + druid 实现不同实例数
  7. 全网最全JDK8新特性 3W 字总结(建议收藏)
  8. spring启动时mybatis-plus注入sql源码解析