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); }
所有博客均为自己学习的笔记。如有错误敬请理解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律