MyBaitsPlus快速入门,java进阶书籍推荐

接受两个参数

value = 主键列名

type = 主键类型

可选类型:

在这里插入图片描述

**使用@TableId注解时,类型为: type = IdType.AUTO 数据库也需要设置自增

否则会出 Cause: java.sql.SQLException: Field ‘id’ doesn’t have a default value**


插入操作

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

//测试插入

@Test

public void testInsert(){

User user = new User();

user.setName(“淮城一只猫”);

user.setAge(5);

user.setEmail(“2424496907@qq.com”);

int result = userMapper.insert(user); //自动生成id

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

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

}


主键生成策略

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

默认使用ID_WORKER,全局唯一id----雪花算法

分布式系统唯一id生成方案汇总

在这里插入图片描述


雪花算法(默认使用):


snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!


主键自增


我们需要配置注解自增:

  • 实体类字段上:@TableId(type = IdType.AUTUO)

  • 数据库字段一定要自增


其余的策略解释


public enum IdType {

AUTO(0), //id自增

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

INPUT(2), //手动输入,一旦手动输入后,就需要自己去写id,否则id为空

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

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

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

}


更新操作

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

//测试更新

@Test

public void testUpdate(){

User user = new User();

user.setId(6L);

user.setName(“我的博客叫:淮城一只猫”);

user.setAge(6);

user.setEmail(“2424496907@qq.com”);

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

int result = userMapper.updateById(user); //自动生成id

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

}


自动填充

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

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

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


方式一:数据库级别(工作中不建议这么做)


1.在表中新增字段create_time、update_time

在这里插入图片描述

2. 再次测试插入方法,需要先把实体类同步!

private Date creteTime;

private Date updateTime;


mysql日期相关的知识点


mysql中的日期类型小结笔记

MySQL-datetime类型的列设置默认值为CURRENT_TIMESTAMP

MySQL中datetime字段的默认值CURRENT_TIMESTAMP


方式二:代码级别


1.删除数据库中的默认值、更新操作

在这里插入图片描述

2.在实体类字段属性上需要注释

//字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段

// 注意!这里需要标记为填充字段

@TableField(fill = FieldFill.INSERT)

private Date creteTime;

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date updateTime;

策略枚举如下:

public enum FieldFill {

/**

  • 默认不处理

*/

DEFAULT,

/**

  • 插入填充字段

*/

INSERT,

/**

  • 更新填充字段

*/

UPDATE,

/**

  • 插入和更新填充字段

*/

INSERT_UPDATE

}

3.自定义实现类 MyMetaObjectHandler(实现元对象处理器接口)

@Slf4j

@Component//填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入

public class MyMetaObjectHandler implements MetaObjectHandler

{

//插入时填充策略

@Override

public void insertFill(MetaObject metaObject) {

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

this.set

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值