您好,登錄后才能下訂單哦!
這篇文章主要講解了“mybatisplus雪花算法生成Id怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mybatisplus雪花算法生成Id怎么使用”吧!
1.建表
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主鍵ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年齡', email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱', PRIMARY KEY (id) );
注意??:
這里的主鍵字段沒有配置自增生成策略,所以執行新增操作的時候,需要給id字段設置值,才能新增成功。類似如下:
INSERT INTO user ( id, name, age, email ) VALUES ( 123434, 'test', 13, '101@qq.com')
相關代碼:
maven依賴:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
實體User:
@Data public 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配置方法:
@Mapper public 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=8080 logging.level.com.laowan.mybatis_plus.mapper=debug spring.datasource.url = jdbc:mysql://localst:3306/seckill?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true spring.datasource.username = root spring.datasource.password = 123456
3.測試
@SpringBootTest class 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的生成策略已經采用了雪花算法,呈趨勢遞增。
很多人可能疑惑????,你這明明啥都沒干,怎么就實現了雪花算法生成Id。
其實mybatis-plus已經內置雪花算法生成分布式唯一id。
在mybatis-plus特性中已經明確說明了這點。
我們可以直接在IDEA中雙擊shift搜索Sequence類查看其具體實現,可以發現其實現就是采用了雪花算法。
實體User:
@Data public class User { private Long id; private String name; private Integer age; private String email; }
這里可以看到我們并沒有在實體類的id上設置id生成策略。
其實mybatis-plus中默認的主鍵生成策略為DefaultIdentifierGenerator
,里面的實現就是采用Sequence生成主鍵。
public class DefaultIdentifierGenerator implements IdentifierGenerator { private final Sequence sequence; public DefaultIdentifierGenerator() { this.sequence = new Sequence((InetAddress)null); } public DefaultIdentifierGenerator(InetAddress inetAddress) { this.sequence = new Sequence(inetAddress); } public DefaultIdentifierGenerator(long workerId, long dataCenterId) { this.sequence = new Sequence(workerId, dataCenterId); } public DefaultIdentifierGenerator(Sequence sequence) { this.sequence = sequence; } public Long nextId(Object entity) { return this.sequence.nextId(); } }
可以通過mybatis-plus中的@TableId
主鍵,主動標識主鍵字段,并配置主鍵生成策略。
@Data public class User { //采用IdentifierGenerator默認的實現類DefaultIdentifierGenerator生成id @TableId(type = IdType.ASSIGN_ID) private Long id; private String name; private Integer age; private String email; }
感謝各位的閱讀,以上就是“mybatisplus雪花算法生成Id怎么使用”的內容了,經過本文的學習后,相信大家對mybatisplus雪花算法生成Id怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。