常用注解
@TableName
映射数据库表名
package com.hyn.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "user")
public class User {
private Integer id;
private String name;
private Integer age;
}
@TableField
映射非主键字段,value用来映射字段名,exit表示是否为数据库字段,数据库中没有对应的字段,则可以使用exist
@TableField(value = "name" )
private String name;
-
select表示是否查询该字段
-
fill表示自动填充,将对象存入 数据库的时候,由mybatis自动给字段赋值,create_time,update_time
-
添加字段
-
添加成员变量
package com.hyn.mybatisplus.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor @TableName(value = "user") public class User { @TableId(type = IdType.ASSIGN_ID) private Long id; @TableField(value = "name") private String name; private Integer age; @TableField(exist = false) private String gender; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; }
-
创建自动填充 处理器
package com.hyn.mybatisplus.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 { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); } }
-
结果
-
测试
@Test void save(){ User user = new User(); user.setName("c罗"); user.setAge(67); mapper.insert(user); } @Test void update(){ User user = mapper.selectById(9); user.setName("邓肯"); mapper.updateById(user); }
-
@TableId
设置逐渐映射,value映射主键字段名,type设置主键类型,主键生成策略。
值 | 描述 |
---|---|
AUTO | 数据库自增 |
NONE | 雪花算法实现 |
INPUT | 需要开发者手动赋值 |
ASSIGN_ID | MP分配ID、Long、Integer、String |
ASSIGN_UUID | 分配UUID,String |
INPUT如果开发者没有手动赋值,则数据库通过自增的方式给主键赋值。
ASSIGN_ID MP自动赋值,也是雪花算法
ASSIGN_UUID 要求主键的数据类型必须是String,自动生成UUID进行赋值
@Version
标记乐观锁,通过version字段来保证数据的安全性,当修改数据时,会以version作为条件,当条件成立时才会修改成功。
version =1
线程1: update … set version = 2 where version =1
线程2: update … set version = 2 where version =1
保证了多线程的时候只能修改一次数据
-
给数据库添加version字段,默认值为1
-
给实体类添加version成员变量,并添加@Version
@Version private Integer version;
-
配置类
package com.hyn.mybatisplus.config; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor (){ return new OptimisticLockerInnerInterceptor(); } }
-
@EnumValue
通过枚举注解,将数据库字段映射成实体类枚举类型成员变量
Enum
package com.hyn.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
public enum StatusEnum{
WORK(1,"上班"),
REST(0,"休息") ;
@EnumValue
private Integer code;
private String msg;
StatusEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
实体类
private StatusEnum status;
Application.yml
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-enums-package: com.hyn.mybatisplus.enums
查询截图
实现接口方式
package com.hyn.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.IEnum;
public enum AgeEnum implements IEnum<Integer> {
ONE(1,"一岁"),
TWO(2,"两岁"),
THREE(3,"三岁")
;
private Integer code;
private String msg;
AgeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public Integer getValue() {
return code;
}
}