创建Spring Web项目
相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.12</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.12</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.34</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.16</version>
</dependency>
</dependencies>
代码生成器
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/db_test?useSSL=false", "root", "123456")
.globalConfig(builder -> {
builder.author("yonsh")
.enableSwagger()
.outputDir(Paths.get(System.getProperty("user.dir")) + "/src/main/java")
.commentDate("yyyy-MM-dd");
})
.dataSourceConfig(builder ->
builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
int typeCode = metaInfo.getJdbcType().TYPE_CODE;
if (typeCode == Types.SMALLINT) {
return DbColumnType.INTEGER;
}
return typeRegistry.getColumnType(metaInfo);
})
)
.packageConfig(builder ->
builder.parent("com.example.mybatis")
.entity("entity")
.mapper("mapper")
.service("service")
.serviceImpl("service.impl")
.xml("mapper.xml")
.pathInfo(Collections.singletonMap(OutputFile.xml, Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper"))
)
.strategyConfig(builder ->
builder.addInclude("user")
.addTablePrefix("t_", "c_")
)
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
常用功能分析
自增ID配置
- 在创建实体类时,id字段没有额外增加注解,mybatisplus默认的ID生成方式是
IdType.ASSIGN_ID,即使用默认的ID生成器DefaultIdentifierGenerator生成
- 填充ID的位置在
com.baomidou.mybatisplus.core.MybatisParameterHandler#populateKeys
- DefaultIdentifierGenerator
- 使用雪花算法生成ID
- ID包括4部分内容:时间戳 + 数据中心标识 + 机器标识 + 序列号部分
- 生成过程:
- 获取当前时间,如当前时间 < 上次ID生成时间,可能产生了时钟回退,等待重试获取当前时间
- 如当前时间 = 上次ID生成时间,同一毫秒内多次获取,序列号自增;否则生成1-2内的随机数作为序列号
- 更新上次ID生成时间
- 计算ID:
时间戳部分 | 数据中心部分 | 机器标识部分 | 序列号部分