Mybatis-Plus学习总结(超详细整理),多线程高并发


插入操作:

插入一条记录: int insert(T entity);

插入类型T:实体对象

举例测试:

@Test

public void testInsert() {

User user = new User();

user.setName(“LY”);

user.setAge(100);

user.setEmail(“[email protected]”);

int result = userMapper.insert(user); //帮我们生成id

System.out.println(result); //受影响的行数

System.out.println(user); //发现id会自动回填

}

运行结果:mybatis-plus实现了主键自动生成

在这里插入图片描述

主键生成策略:

数据库插入的id为全局默认的id(ID_WORKER),我们需要配置主键自增,在实体类字段上添加注解: @TableId(type =IdType.AUTO),数据库字段一定要是自增的。

public enum IdType {

AUTO(0), //数据可id自增

NONE(1), //未设置主键

INPUT(2), //手动输入

ID_WORKER(3), //默认的全局唯一id

UUID(4), //全局唯一id uuid

ID_WORKER_STR(5); // ID_WORKEK 字符串表示法

private int key;

private IdType(int key) {

this.key = key;

}

public int getKey() {

return this.key;

}

}

添加过注解,并将数据库id字段设置为自增后,测试插入数据:

在这里插入图片描述

雪花算法:

SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。

这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。

更新操作

// 根据 whereEntity 条件,更新记录

int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper updateWrapper);

// 根据 ID 修改

int updateById(@Param(Constants.ENTITY) T entity);

#参数说明

类型 参数名 描述

T entity 实体对象 (set 条件值,可为 null)

Wrapper updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)

举例测试:

@Test

public void testUpdate() {

//sql自动动态配置

User user = new User();

user.setName=(“ZZ”);

user.setId(3L);

user.setAge(“50”);

//注意:updateById的参数是一个对象

userMapper.updateById(user);

}

运行结果:

在这里插入图片描述

自动填充


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

阿里巴巴开发手册:所有的数据库表:gmt_create\gmt_modified几乎所有的表都要配置上!而且需要自动化

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

​在表中新增字段 create_time 、update_time,设为默认CURRENT_TIMESIAMP

方式二:代码级别

​在表中新增字段 create_time 、update_time:

在这里插入图片描述

​ 实体类上的属性需要增加注解 @TableField

@Data

@AllArgsConstructor

@NoArgsConstructor

public class User {

@TableId(type = IdType.AUTO)

private Long id;

private String name;

private Integer age;

private String email;

//创建时间,插入数据时操作

@TableField(fill = FieldFill.INSERT)

private Date createTime;

//更新时间,插入和更新是操作

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date updateTime;

}

​ 编写处理器来处理这个注释:

@Slf4j

@Component //不要忘记吧处理器加到IOC容器中

public class MyMetaObjectHandler implements MetaObjectHandler {

//插入时候的填充策略

@Override

public void insertFill(MetaObject metaObject) {

log.info(“start insert fill …”); //日志

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值