史上最全SpringBoot教程,从零开始带你深入♂学习(十二

}

领取资料

[image

]( )

数据库插入的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;

}

修改数据库自增

[image

]( )

输出结果:

[image

]( )

ID对比,实现自增

[image

]( )

更新数据

===================================================================

领取资料

一、编写测试类

@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);

}

二、输出结果

image

三、数据库发生改变

[image

]( )

总结:所有sql语句都是自动拼接的

自动填充

===================================================================

领取资料

官方文档:https://mp.baomidou.com/guide/auto-fill-metainfo.html

创建时间、修改时间这些操作一般都是自动化完成的,我们不希望手动更新

方式一、数据库级别(工作中不允许修改数据库)

1、在表中新增字段:create_time,update_time

image

2、再次测试插入方法,我们需要先把实体类同步

private Date createTime;

private Date updateTime;

3、查看结果

image

更新时间已修改

[image

]( )

方式二、代码级别

1、删除数据库的默认值删掉

[image

]( )

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档

  • 第一个要分享给大家的就是算法和数据结构

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第二个就是数据库的高频知识点与性能优化

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第三个则是并发编程(72个知识点学习)

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
EpSSgy3G-1712411262499)]

  • 第三个则是并发编程(72个知识点学习)

[外链图片转存中…(img-COAauAvS-1712411262500)]

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

[外链图片转存中…(img-zUgZE2I0-1712411262500)]

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值