mybatis-plus 4 其他特性
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