随笔 - 91,  文章 - 0,  评论 - 3,  阅读 - 47581

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);
    }
复制代码

更新null值,无法通过实体更新,只能使用warrpper的Set实现

如想把上例中的email改为空值。

1
2
3
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(User::getEmail,"");
updateWrapper.eq(User::Id,1L);<br><br>userService.update(updateWrapper);  //或者userMapper.update(null,updateWrapper);

  

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);
    }
复制代码

 

posted on   飞飞乐园  阅读(325)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示