MyBatis-Plus CRUD之C字决(添加)和U字决(更新)

CRUD之C字决(添加)

  • 在入门的基础上
  • 样例
@SpringBootTest
class MybatisPlusFastStartApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    void testInsert(){//自带id添加算法
        User user = new User();
        user.setAge(45).setName("KittyGuy").setEmail("*****@qq.com");
        userMapper.insert(user);
        System.out.println(Arrays.toString(userMapper.selectList(null).toArray()));
    }
}
复制代码

要点

  • 关于主键id,如果不主动添加,MP会默认使用雪花算法+UUID(不含中划线),添加id

  • 何谓雪花算法和UUID

    pojo

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)//开启链式
public class User {
    @TableId(type = IdType.AUTO)//ID_WORKER已过时,作者建议使用ASSIGN_ID。AUTO自增
    private Long id;
    private String name;
    private Integer age;i
    private String email;
}
复制代码
  • 注解

@TableId(type = ""),用在实体类的字段上,表明id生成策略,

image.png

CRUD之U字诀(更新)

  • 样例
@SpringBootTest
class MybatisPlusFastStartApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    void testQuery() {                         //参数是Wrapper
        List<User> list = userMapper.selectList(null);
        System.out.println(Arrays.toString(list.toArray()));
    }
    @Test
    void testUpdate(){
        User user = new User(5L,"me",777,"test@qq.com");
        userMapper.updateById(user);
        testQuery();
    }
}
复制代码

image.png

字段自动填充

  • 需求:在进行更新和插入操作时,顺带写入插入(creat_Time)和更新时间(update_Time)

先在数据库中创建两个字段(creat_Time)和(update_Time)

  • 代码

pojo

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)//开启链式
public class User {
   // @TableId(type = IdType.AUTO)//ID_WORKER已过时,作者建议使用ASSIGN_ID。AUTO自增
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充字段
    private Date updateTime;
    @TableField(fill = FieldFill.INSERT)//插入时填充字段
    private Date createTime;
}
复制代码

编写元对象字段填充控制器MetaObjectHandler

@Component//必须添加到IOC容器                 //元对象字段填充控制器抽象类,实现公共字段自动写入
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        /*
        通用填充
        参数:
        fieldName – java bean property name
        fieldVal – java bean property value
        metaObject – meta object parameter
         */
        this.setFieldValByName("createTime",new Date(),metaObject);
        updateFill(metaObject);
    }
    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
                                                      //ForMatter都不要了!!
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}
复制代码

test

@SpringBootTest
class MybatisPlusFastStartApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    void testQuery() {                         //参数是Wrapper
        List<User> list = userMapper.selectList(null);
        System.out.println(Arrays.toString(list.toArray()));
    }
    @Test
    void testInsert(){//自带id添加算法
        User user = new User();
        user.setAge(45).setName("KittyGuy").setEmail("*****@qq.com");
        userMapper.insert(user);
        System.out.println(Arrays.toString(userMapper.selectList(null).toArray()));
    }
    @Test
    void testUpdate(){
        User user = new User();
        user.setAge(77)
                .setName("mmgg")
                .setId(1383720015207952386L);
        userMapper.updateById(user);
        testQuery();

    }
}
复制代码

image.png

bug收集

image.png

插入的时间都是00:00:00,是代码字段的数据类型和数据库中的不匹配,将数据库中的时间字段改成timestamp

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享