栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


目录:

(1)更新操作

(2)自动填充处理


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

(1)更新操作

测试类:

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);
    }
}

 运行之前数据库中的表:

运行更新测试:

运行之后数据库中的表:

 

 (2)自动填充处理

 

 

 

添加字段处理注解:@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 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);
    }
}

测试插入:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号