### 数据库和持久层 #### 数据库连接配置 ```properties jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/iot_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=ENC(WbEfoi/DMZVrFCV1UG3uJA==) ``` #### Mybaits Mapper 基本的增删改查 Mapper 只需继承 tk.mybatis.mapper.common.Mapper(具体参考 https://git.oschina.net/free/Mapper) 其它数据库操作按照原生 Mybaits 的开发方式将 SQL 语句配置在 Mapper XML 文件中。 #### 主键 **主键约定**: * BigInt * 非自增 * 分布式环境下保持唯一 * 时间上有序 本框架提供了 Snowflake 算法来生成主键,使用 `@Key` 注解即可在保存到数据库之前由 MyBatis 拦截器生成ID , 例如: ```java public class Entity { @Id @Key(type = KeyType.SNOWFLAKE) private Long id; } ``` **关于 Twitter Snowflake 主键生成算法**: * 分布式 64位 ID 算法 * 使用 41 bit来存放时间,精确到毫秒,可以使用到 2082 年 * 使用 10 bit来存放逻辑分片ID,分片ID 范围为 [0, 1023] * 使用 12 bit来存放自增长ID,每个分片每毫秒最多可以生成 4096 个ID [0, 4095] * 剩余最左侧 1 bit 未使用 | timestamp | datanode | sequence | |-----------|----------|----------| | 41bit | 10bit | 12bit |