ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CRUD拓展

2021-07-29 15:04:06  阅读:230  来源: 互联网

标签:metaObject CRUD 拓展 public private id new ID


CRUD拓展

insert插入

@Test
public void testinsert(){
    User u=new User();
    u.setName("joker_dj");
    u.setAge(18);
    u.setEmail("saxon822@qq.com");
    mapper.insert(u);
}

在这里插入图片描述

ID会自动生成

在这里插入图片描述

常见的id生成有

img
id生成策略

博客:链接

雪花算法

snowflake是Twitter开源的分布式ID生成算法

自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景。
GUID:采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。

最高位是符号位,始终为0,不可用。
41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。
10位的机器标识,10位的长度最多支持部署1024个节点。
12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。
原文:链接

测试不同的主键自增策略

public enum IdType {
    AUTO(0),//主键自增
    NONE(1),//不使用
    INPUT(2),//手动输入
    ID_WORKER(3),//默认全局唯一Id
    UUID(4),//全局唯一id uuid
    ID_WORKER_STR(5);//字符串表示法
}

在这里插入图片描述

img

update更新

@Test
public void testupdate(){
    User u=new User();
    u.setId(1L);
    //自动拼接动态sql
    u.setName("saxon");
    u.setAge(11);
    u.setEmail("saxon@qq.com");
    mapper.updateById(u);
}

自动填充

创建时间、修改时间、这些操作是自动化完成的,我们不希望手动更新
阿里巴巴手册:所有数据表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需要自动化!

方式一:数据库级别
  1. 在表中新增字段 create_time, update_time
    在这里插入图片描述

再次测试,同步实体类
在这里插入图片描述
运行测试

img

注意点:不建议这种方式。

方式二:代码级别

  1. 删除数据库的默认值
    在这里插入图片描述
  2. 实体类上增加注解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.INPUT)       //一旦手动输入id后,就需要自己配置id
    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;
}
  1. 编写handler策略
@Slf4j
@Component  //将组件插入到ioc中
public class MyMetaObjectHandler implements MetaObjectHandler {
    /*插入时的填充策略*/
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("填充....");//setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    /*更新时的填充策略*/
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("更新....");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

标签:metaObject,CRUD,拓展,public,private,id,new,ID
来源: https://www.cnblogs.com/saxonsong/p/15075037.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有