MyBatis-plus:更新操作、自动填充处理


目录:

(1)更新操作

(2)自动填充处理


这里的设置跟上一篇的一样,使用上一篇中的项目:

(1)更新操作

66ee22df89d44e6e8ba418f0f10d855c.png

70ec3f29d2144debbcd656be2b0ea1ad.png

测试类:

package com.kuang;

import com.kuang.mapper.UserMapper;
import com.kuang.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class MybatisPlusApplicationTests {
    //测试,我们没有写任何CRUD,测试我们能不能使用
    //继承了BaseMapper,所有的方法都来自父类,我们也可以编写自己的扩展方法
    @Autowired
    private UserMapper userMapper;

    
    //更新测试
    public void testUpdate(){
        User user=new User();
        //根据条件自动拼接动态sql
        user.setId(6L);
        user.setName("关注公众号:狂神说");
        user.setAge(18);

        //注意:updateById 但是参数是一个对象!通过主键id进行更新
        int i=userMapper.updateById(user);
        System.out.println(i);
    }
}

 运行之前数据库中的表:

2a51205d685f46d3b2fc55172c80b891.png

运行更新测试:

f13a372402ca4db7af58bd7cc9368908.png

运行之后数据库中的表:

 f489151393b3456eb657ddb6bd840182.png

 (2)自动填充处理

de0a1f7b2c1249de98a9d2aa6e574a56.png

 97975017932f4c58b985b177d045b2e6.png

b817136be70a4fc6ae1c609c6768734c.png

e534187dd5014f4d9fe15088258eed7d.png

6fab07b1b99e4cb7a72635d50ec0c66d.png

 21ba33a18b684f80bc417288b5cee97c.png

 185a1047386d4995b5f8f8d7737c88ee.png

添加字段处理注解:@TableField

package com.kuang.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    //对应数据库中的主键(主键策略:uuid、自增id、雪花算法、redis、zookeeper)
    @TableId(type = IdType.AUTO) //一旦手动输入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;
}

设置处理器来处理这个处理字段注解:

当进行插入了,插入时填充策略会自动帮你,通过反射去读取哪些有注解对应的值,会自动帮你把createTime添加一个new Date的值

MyMetaObjectHandler类:

package com.kuang.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 sun.rmi.runtime.Log;

import java.util.Date;


@Slf4j //注解添加日志
@Component  //注解,加入spring容器创建对象
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill");
        //设置字段的值
        //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("start update fill");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

测试类:

package com.kuang;

import com.kuang.mapper.UserMapper;
import com.kuang.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class MybatisPlusApplicationTests {
    //测试,我们没有写任何CRUD,测试我们能不能使用
    //继承了BaseMapper,所有的方法都来自父类,我们也可以编写自己的扩展方法
    @Autowired
    private UserMapper userMapper;

    //查询测试
    @Test
    void contextLoads() {
        //参数是一个Wapper,条件构造器,类似sql我们要编写的条件,这里我们先不用 null,没有条件,查询所有的用户
        //查询全部用户
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

    //插入测试
    @Test
    public void testInsert(){
        User user=new User();
        user.setId(6L);
        user.setName("狂神说Java2");
        user.setAge(3);
        user.setEmail("241374565@qq.com");

        int result=userMapper.insert(user);//这里我们没有设置id,帮助我们自动的生成id
        System.out.println(result);//受影响的行数
        System.out.println(user);//发现,id会自动回填
    }
    //更新测试
    @Test
    public void testUpdate(){
        User user=new User();
        //根据条件自动拼接动态sql
        user.setId(1551834196598423555L);
        user.setName("关注公众号:狂神说");
        user.setAge(22);

        //注意:updateById 但是参数是一个对象! 通过主键id进行更新
        int i=userMapper.updateById(user);
        System.out.println(i);
    }
}

测试插入:

9eb9c12c3abf450aba0a8716a656b0c5.png

0a335bca2570411aaccbf6324becf2a0.png 测试更新:数据库update_time的时间发生了改变

878a40788cf44f4998be6338958eeef1.png

2e1e8baf31b9400c895c949bb961802a.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值