一、配置日志
现在我们的所有sql是不可见的,我们希望知道他是怎么执行的
开发时这是我们必看的,上线时可以去掉,他是浪费时间的
# 配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
再次运行就可查看了日志了.
insert
@Test
public void testinsert(){
User user = new User();
user.setName("神奇阿龙");
user.setAge(21);
user.setEmail("2369488791@qq.com");
int result = usermapper.insert(user);//帮我们自动生成ID
System.out.println(result); //受影响行数
System.out.println(user); //他会自动回填id
}
自动回填ID,为什么是这样的ID呢
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qj8SUwso-1621305143606)(http://47.94.18.14:8080/sqalong/img/sqalongblog/mp3.png)]
## 数据库插入的ID默认值为: 唯一id
二、主键生成策略
默认 ID_WORKER 全局唯一id
分布式系统唯一id生成:https://segmentfault.com/a/1190000015273990
##### 雪花算法:
国外的twitter分布式下ID生成算法
1bit+41bit+10bit+10bit=62bit
高位随机+毫秒数+机器码(数据中心+机器id)+10的流水号
优点:代码实现简单,不占用宽带,数据迁移不受影响,低位趋势递增
缺点:多台服务器时间一定要一样,无序无法保证趋势递增要求
主键自增
我们需要配置自增:
- 实体类字段上
@TableId(type = IdType.AUTO)
- 数据库字段一定要自增!
- 再次测试插入即可
其余源码解释 点击进入 IdType 可查看
public enum IdType {
AUTO(0),//数据库id自增
NONE(1),//未设置主键
INPUT(2),//手动输入
ASSIGN_ID(3),
ASSIGN_UUID(4),
ID_WORKER(3),//默认全局唯一id
ID_WORKER_STR(3),//字符串表示法
@Deprecated
UUID(4); //全局唯一id uuid
```