[Java][服務器][MyBatis-Plus] MyBatisPlus的CRUD 實現修改數據和自動填充

二、update

1、根據Id更新操作

注意:update時生成的sql自動是動態sql:UPDATE user SET age=? WHERE id=? 

    //修改操作
    @Test
    public void updateUser() {

        User user = new User();
        user.setId(2L);
        user.setAge(120);

        int row = userMapper.updateById(user);
        System.out.println(row);
    }
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@62628e78] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1894978338 wrapping com.mysql.cj.jdbc.ConnectionImpl@3f1ddac2] will not be managed by Spring
==>  Preparing: UPDATE user SET age=? WHERE id=? 
==> Parameters: 120(Integer), 2(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@62628e78]

2、自動填充

項目中經常會遇到一些數據,每次都使用相同的方式填充,例如記錄的創建時間,更新時間等。

我們可以使用MyBatis Plus的自動填充功能,完成這些字段的賦值工作:

(1)數據庫表中添加自動填充字段

在User表中添加datetime類型的新的字段 create_time、update_time

路徑 選擇【數據庫】【數據表】【右鍵】【添加字段】

(2)實體上添加註解

package com.mybatisplus.demo.entity;

import lombok.Data;

import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;

@Data
public class User {

    private Long id;
    private String name;
    private Integer age;
    private String email;

    //import com.baomidou.mybatisplus.annotation.*;
    //import java.util.Date;
    //create_time
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    //update_time
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

(3)實現元對象處理器接口

注意:不要忘記添加 @Component 註解

package com.mybatisplus.demo.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    //使用mp實現添加操作,這個方法執行
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);

        this.setFieldValByName("version",1,metaObject);
    }

    //使用mp實現修改操作,這個方法執行
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

 (4)總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章