以下内容参考尚硅谷的https://www.bilibili.com/video/BV1y7411y7am视频
1.查看sql语句和实现添加操作
1.1 查看sql语句
在application.properties中配置下面语句可以在控制台中查看相关的sql语句
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
下面是一个添加操作的sql语句

1.2 实现添加操作
@Test
public void insertUser(){
User user = new User();
user.setName("张飞");
user.setAge(36);
user.setEmail("zhangfei@qq.com");
int insert = userMapper.insert(user);
if (insert>0){
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}
运行上面语句,数据库中添加下面数据

此处需要注意的是,并没有设置id,mybatisplus自动生成了一个19位的id值。
2.如何使用主键策略
在实体类id上面添加注解@TableId(type = IdType.ID_WORKER),

其中有6中可选择,如下所示

其中
AUTO:自动增长
ID_WORKER:mp自带策略(id为整型时使用)
ID_WORKER_STR:mp自带策略(id为字符串类型时使用)
INPUT:用户手动输入
NONE:不使用策略
UUID:随机生成一个id
2.1 主键策略–自动增长
2.2 .主键策略–UUID
每次生成随机唯一的值
2.3 主键策略–redis生成id
2.4 主键策略–mp自带默认策略(雪花算法)
3.实现修改操作
根据id修改,只需要添加需要修改的项即可
注意如果id为long类型,需要在数字后面添加L
@Test
public void updateUser(){
User user = new User();
user.setId(1280147169042636801L);
user.setAge(42);
int result = userMapper.updateById(user);
if (result>0){
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
}
4.自动填充
4.1 原始方式
1.在数据库增加字段
在数据库增加create_time,update_time字段
2.在实体类增加属性
在实体类增加create_time,update_time属性
3.手动设置相关属性
执行添加操作
@Test
public void insertUser1(){
User user = new User();
user.setName("刘备");
user.setAge(29);
user.setEmail("liubei@qq.com");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
int insert = userMapper.insert(user);
if (insert>0){
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}
4.运行结果

4.2 自动填充
1.在实体类上添加注解
@TableField(fill = FieldFill.INSERT)//插入时注入
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和修改时都注入
private Date updateTime;
2.配置handler类
实现MetaObjectHandler中的两个方法(插入和修改)
注意必须在类上面添加@Component注解,否则自动填充无法生效
package com.nslt.mpdemo10101.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);
}
//mp执行修改操作时,这个方法执行
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
3.测试
执行下面语句
@Test
public void insertUser2(){
User user = new User();
user.setName("关羽");
user.setAge(45);
user.setEmail("关羽@qq.com");
int insert = userMapper.insert(user);
if (insert>0){
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}
结果如下

发现时间已自动填充
本文介绍了MyBatisPlus中主键生成策略的使用,包括自动增长、UUID、Redis生成ID和默认雪花算法,并详细讲解了如何实现添加、修改操作。同时,文章还探讨了自动填充功能,通过原始方式和注解配置实现创建时间和更新时间的自动管理。
946

被折叠的 条评论
为什么被折叠?



