MyBatis-plus如何设置主键策略和分页插件实现高效查询?

摘要:MyBatis-plus高级应用 主键策略 在MyBatis-plus中使用@TableId注解来设置主键生成策略。 在设置好自增策略后,在新增数据时,就不用给主键属性赋值了,数据库会自动生成主键的值。 auto策略 该策略为跟随数据库表的
MyBatis-plus高级应用 主键策略 在MyBatis-plus中使用@TableId注解来设置主键生成策略。 在设置好自增策略后,在新增数据时,就不用给主键属性赋值了,数据库会自动生成主键的值。 auto策略 该策略为跟随数据库表的主键策略,如果数据库表的主键设置为自增,那么主键策略就是自增。 public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; } input策略 该策略表示,必须由我们手动设置id,否则无法添加数据。那么我们在新增数据时,就必须给主键赋值了。 public class User { @TableId(type = IdType.INPUT) private Long id; private String name; private Integer age; private String email; } ASSIGN_ID策略 当一个主键自增表的数据量很大时,需要对表进行拆分(水平分表或垂直分表),对于拆分后的数据,有三点需求: 之前表的主键有序,拆分后也要有序 虽然做了拆分,但每条数据还要保证主键唯一 主键不要直接暴露数据的数量,这样容易泄露关键信息 为了满足这三个需求,因此需要使用雪花算法。 雪花算法把一个 64 位的长整型数字(long 类型)拆分成不同 “段位”,分别存储时间戳、机器标识、序列号等信息,通过分段管理确保 ID 全局唯一,且因时间戳在前,ID 整体呈递增趋势。 雪花算法的核心结构(64 位分段): 位段 位数 作用 符号位 1 位 固定为 0(因为 ID 是正数,负数无意义) 时间戳位 41 位 存储相对时间戳(如相对于某个固定起始时间的毫秒数),可支持约 69 年的时间范围 机器 / 数据中心位 10 位 拆分(如 5 位数据中心 + 5 位机器 ID),最多支持 1024 个节点(2^10) 序列号位 12 位 同一毫秒内,同一机器生成的 ID 序号,支持每毫秒生成 4096 个 ID(2^12) public class User { // 主键生成策略是雪花算法 // 64位二进制最终转换为19位十进制,所以最后生成的id长度是19位 @TableId(type = IdType.ASSIGN_ID) private Long id; private String name; private Integer age; private String email; } NONE策略 NONE策略表示不指定主键生成策略,此时会跟随全局生成策略。当不指定策略时也会跟随全局策略。 那如何设置全局生成策略呢? 在springboot的配置文件中设置如下: mybatis-plus: global-config: banner: false db-config: # 设置全局的主键生成策略。如果不指定,框架默认是assign_id策略 id-type: assign_id ASSIGN_UUID策略 使用uuid作为主键的一种策略。 public class User { @TableId(type = IdType.ASSIGN_UUID) private String id; private String name; private Integer age; private String email; } 分页插件 分页的本质就是设置一个拦截器,通过拦截器拦截sql,通过在sql语句末尾添加limit关键字来实现分页效果。 具体配置步骤如下: 通过配置类指定一个具体数据库的分页插件,因为具体的数据库方言不同,分页语句也不同。
阅读全文