}
[
]( )
数据库插入的id的默认值为:全局唯一id
=====================================================================
官方文档:https://mp.baomidou.com/guide/annotation.html#tablename
雪花算法
SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。
这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。
@TableId
- 描述:主键注解
| 属性 | 类型 | 必须指定 | 默认值 | 描述 |
| — | — | — | — | — |
| value | String | 否 | “” | 主键字段名 |
| type | Enum | 否 | IdType.NONE | 主键类型 |
IdType
| 值 | 描述 |
| — | — |
| AUTO | 数据库ID自增 |
| NONE(默认值) | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
| INPUT | insert前自行set主键值(手动代码设置) |
| ASSIGN_ID | 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法) |
| ASSIGN_UUID | 分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法) |
修改代码重新测试
修改实体类
public class User {
@TableId(type =IdType.AUTO)//设置主键自增,同时要修改数据库主键自增
private Long id;
private String name;
private Integer age;
private String email;
}
修改数据库自增
[
]( )
输出结果:
[
]( )
ID对比,实现自增
[
]( )
===================================================================
一、编写测试类
@Test
public void testUpdate(){
User user = new User();
//通过条件,自动拼接动态sql
user.setId(6L);
user.setName(“zhangsan”);
//注意:updateById参数不是int类型,而是一个对象
int i = userMapper.updateById(user);
System.out.println(i);
}
二、输出结果
三、数据库发生改变
[
]( )
总结:所有sql语句都是自动拼接的
===================================================================
官方文档:https://mp.baomidou.com/guide/auto-fill-metainfo.html
创建时间、修改时间这些操作一般都是自动化完成的,我们不希望手动更新
方式一、数据库级别(工作中不允许修改数据库)
1、在表中新增字段:create_time,update_time
2、再次测试插入方法,我们需要先把实体类同步
private Date createTime;
private Date updateTime;
3、查看结果
更新时间已修改
[
]( )
方式二、代码级别
1、删除数据库的默认值删掉
[
]( )
2、实体类字段属性上添加注解
//字段添加填充内容
@TableField(fill = FieldFill.INSERT) //插入的时候实现自动填充
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和更新的时候实现自动填充
private Date updateTime;
3、编写处理器来处理这个注解
package com.study.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
@Slf4j //日志
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info(“start insert fill …”);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
EpSSgy3G-1712411262499)]
- 第三个则是并发编程(72个知识点学习)
[外链图片转存中…(img-COAauAvS-1712411262500)]
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
[外链图片转存中…(img-zUgZE2I0-1712411262500)]
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!