zoukankan      html  css  js  c++  java
  • mybatis-plus-增改,自动填充

    1.主键生成策略

    配置主键自增:

    ①实体类字段加上(@TableId(type=IdType.AUTO))

    ②数据库字段一定要自增

    其余的源码解释:

    public enum IdType{
        AUTO(0),//自增
        NONE(1),//未设置主键
        INPUT(2),//手动输入
        ID_WORK(3),//默认全局唯一id
        UUID(4),//全局唯一id  uuid
        ID_WORK_STR(5);//字符串表示法
    }

    2.插入操作

    public void testInsert(){
            User user=new User();
            user.setName("zhangsan");
            user.setAge(12);
            user.setEmail("123@abc.com");
            int insert = userMapper.insert(user);//自动生成id
            System.out.println(user);
        }

    3.更新操作

    public void testUpdate(){
            //通过条件自动拼接sql  UPDATE user SET age=?, email=? WHERE id=? 
            User user=new User();
            user.setId((long)1);
            user.setEmail("1234@abc.com");
            //参数是一个对象
            int update = userMapper.updateById(user);
            System.out.println(update);
        }

    4.自动填充

    创建时间,修改时间,这种操作一般都是自动填充。

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

    方式一:数据库级别(给字段赋初值)

    方式二:代码级别

    public enum FieldFill{
        DEFAULT,
        INSERT,
        UPDATE,
        INSERT_UPDATE;
    }

    ①实体类字段属性上增加注解

    //自段添加填充
    @TableField(fill= FieldFill.INSERT)
    private Date createTime;
    @TableField(fill=FieldFill.INSERT_UPDATE)
    private Date updateTime;

    ②编写处理器来处理这个注解

    新建处理类,继承接口MetaObjectHandler,重写填充方法

    package com.example.demo.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;
    @Slf4j
    @Component//一定不要忘记把处理器加到IOC容器中
    public class MyMetaObjectHandler implements MetaObjectHandler {
        //插入时的填充策略
        @Override
        public void insertFill(MetaObject metaObject) {
            log.info("start insert fill ...");
            //setFieldValByName(String fieldName,Object fieldValue,MetaObject metaObject)填充字段名,字段填充值,要给哪个值处理
            this.setFieldValByName("createTime",new Date(),metaObject);
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
        //更新的填充策略
        @Override
        public void updateFill(MetaObject metaObject) {
            log.info("start update fill ...");
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    }

    测试插入

    @Test
        public void testInsert(){
            User user=new User();
            user.setName("zhangsan");
            user.setAge(12);
            user.setEmail("123@abc.com");
            int insert = userMapper.insert(user);//自动生成id
            System.out.println(user);
        }

    所有博客均为自己学习的笔记。如有错误敬请理解。
  • 相关阅读:
    ⑤SpringCloud 实战:引入Zuul组件,开启网关路由
    ④SpringCloud 实战:引入Hystrix组件,分布式系统容错
    ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
    ②SpringCloud 实战:引入Feign组件,发起服务间调用
    Spring 事件监听机制及原理分析
    ①SpringCloud 实战:引入Eureka组件,完善服务治理
    AbstractQueuedSynchronizer(AQS) 总结篇
    源码分析:CountDownLatch 之倒计时门栓
    源码分析:Semaphore之信号量
    Java 虚拟机垃圾回收算法总结
  • 原文地址:https://www.cnblogs.com/tangtang-benben/p/14477502.html
Copyright © 2011-2022 走看看