MyBatis-Plus CRUD 扩展

目录

日志配置

主键生成策略

自动填充

​乐观锁

分页查询


日志配置

# 日志配置(配置SQL在控制台输出)
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

控制台输出结果

主键生成策略

新增操作

执行insert操作时,数据库插入的id默认值为:全局的唯一id (雪花算法生成)

雪花算法:

SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。

新增时默认生成主键截图:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    // 对应数据库中的主键 (uuid、自增id、雪花算法生成、redis生成ID、zookeeper)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

主键自增

1、实体类主键上标注  @TableId(type = IdType.AUTO)

2、数据库主键字段改为自增

 3、插入数据,测试主键自增

 其余源码解释:

public enum IdType {
    AUTO(0), // 数据库id自增
    NONE(1), // 未设置主键
    INPUT(2), // 手动输入;设置手动输入后,需要自己配置id
    ASSIGN_ID(3),
    ASSIGN_UUID(4),
    /** @deprecated */
    @Deprecated
    ID_WORKER(3),  // 默认全局id
    /** @deprecated */
    @Deprecated
    ID_WORKER_STR(3), // ID_WORKER 的字符串形式
    /** @deprecated */
    @Deprecated
    UUID(4); // 全局唯一id uuid
}

更新操作

 

 自动填充

创建时间、修改时间!我们希望是自动化完成,不希望手动更新!

阿里巴巴开发手册:所有数据库表需配置:gmt_create、gmt_modified 且需要自动化。

方式一:数据库

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

注意事项:时间列默认系统当前时间 default CURRENT_TIMESTAMP  一个表中只能有一个列。

否则报错,报错信息:

Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

 修改其中一个 TIMESTAMP 列,默认值不为系统当前时间,创建成功

方式二:代码

 1、删除数据库默认值

 2、实体类属性上增加注解

    //执行插入操作时,自动填充内容,默认是不填充
    @TableField(fill = FieldFill.INSERT)
    private java.util.Date createTime;

    //执行插入或者更新操作时,自动填充内容
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private java.util.Date updateTime;
public enum FieldFill {
    /**
     * 默认不处理
     */
    DEFAULT,
    /**
     * 插入填充字段
     */
    INSERT,
    /**
     * 更新填充字段
     */
    UPDATE,
    /**
     * 插入和更新填充字段
     */
    INSERT_UPDATE
}

3、编写处理器

/**
 * @Author LMGD
 * @Date 2021/12/17 10:25
 */
@Component //加上 @Component 注解,把处理器配置到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {

    private Logger log = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.setFieldValByName("createTime", new java.util.Date(), metaObject);
        this.setFieldValByName("updateTime", new java.util.Date(), metaObject);
    }

    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.setFieldValByName("updateTime", new java.util.Date(), metaObject);
    }
}

4、执行效果图

执行插入、修改操作自动填充时间

乐观锁

官网地址:乐观锁插件 | MyBatis-Plus

 分页查询

分页查询:

1、原始的 limit 进行分页查询

2、pageHelper 第三方分页插件

3、MyBatis-Plus 内置的分页插件

 如何使用MyBatis-Plus 内置的分页插件?

1、配置 PaginationInnerInterceptor 分页插件

/**
 * @Author LMGD
 * @Date 2021/12/17 14:34
 */
@MapperScan("com.lmgd.mybatisplus.mapper")
@EnableTransactionManagement//添加事务
@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInnerInterceptor paginationInnerInterceptor() {
        return new PaginationInnerInterceptor();
    }

    // 最新版
   /* @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }*/
}

2、使用  BaseMapper类中的 selectPage()方法 + Page 类

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> selectPageUser(User user) {
        Page<User> page = new Page(1, 5);
        page = userMapper.selectPage(page, null);
        List<User> userList = page.getRecords();
        userList.forEach(System.out::println);
        return userList;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值