mybatis-plus id生成器,mybatisplus雪花算法源码
目录
前言一、mybatis-plus官网二、雪花算法实战三、实现分析四、为什么默认就是雪花算法五、主动设置身份生成策略总结
前言
在实际开发过程中,数据库自增主键生成身份能满足大部分的场景。但是随着分布式应用场景的增多,表数据的增大导致分表分库的大量应用。数据库自增主键的生成规则无法满足对应的业务场景,于是诞生了越来越多的分布式身份生成算法,其中雪花算法是目前最为流行的。今天说一下在mybatis-plus中如何使用雪花算法生成身份证.
一、mybatis-plus官网
官方文档:https://baomidou.com/
饭桶地址:https://github。com/米宝窦/mybatis-plus
TIP:
推荐学习框架的使用的时候,都多研究下官网,获取第一手资料。
二、雪花算法实战
1.建表
如果存在用户,则删除表;创建表用户(id BIGINT(20)不为空注释主键ID ,name VARCHAR(30) NULL默认空注释姓名,age INT(11) NULL默认空注释年龄,电子邮件VARCHAR(50)空默认空注释邮箱主键(id));注意:这里的主键字段没有配置自增生成策略,所以执行新增操作的时候,需要给编号字段设置值,才能新增成功。类似如下:
插入用户(身份证,姓名、年龄、电子邮件)值(123434,测试,13,《101@qq.com》)
相关代码:maven依赖:
依赖项依赖项groupIdorg.springframework.boot/groupId工件id spring-boot-starter-web/工件id/依赖项依赖项groupIdcom.baomidou/groupId工件id mybatis-plus-boot-starter/工件id版本3 .5 .2/版本/依赖项依赖项groupId MySQL/groupId工件Id MySQL-connector-Java/工件id范围运行时/范围/依赖性依赖项groupIdorg.projectlombok/groupId工件id lombok/工件id选项true/可选/依赖项依赖项依赖项groupIdorg.springframework.boot/groupId工件id spring-boot-starter-test/工件id scope test/scope/dependencies/dependencies实体用户:
@Dat
apublic class User { private Long id; private String name; private Integer age; private String email;}mapper:
public interface UserMapper extends BaseMapper<User> {}
启动类Application:
@SpringBootApplication@Slf4j@MapperScan("com.laowan.mybatis_plus.mapper")public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class, args); log.info("mybatis_plus_demo 启动成功"); }}
注意⚠️:这里在启动类上配置了@MapperScan(mapper接口目录),所以在UserMapper接口上没有条件@Mapper注解。@Mapper配置方法:
@Mapperpublic interface UserMapper extends BaseMapper<User> {}
两者任意选择一种方式配置即可,如果都不配置,那么在执行dao层方法进行数据操作时,会出现在spring容器中找不到对应的bean的异常。
@Mapper和@MapperScan都不配置调用mapper方法时出现的异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.laowan.mybatis_plus.mapper.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
配置属性:
server.port=8080logging.level.com.laowan.mybatis_plus.mapper=debugspring.datasource.url = jdbc:mysql://localst:3306/seckill?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=truespring.datasource.username = rootspring.datasource.password = 123456
3.测试
@SpringBootTestclass MybatisPlusApplicationTests { @Autowired private UserMapper userMapper; @Test public void testInsert() { System.out.println(("----- insert method test ------")); User user = new User(); user.setName("test"); user.setAge(13); user.setEmail("101@qq.com"); userMapper.insert(user); System.out.println(user.toString()); }
执行结果:
User(id=728666272023183375, name=test, age=13, email=101@qq.com)
多次执行,发现主键ID的确呈趋势递增。
结论:主键id的生成策略已经采用了雪花算法,呈趋势递增。
三、实现分析
很多人可能疑惑
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。