MyBatis-Plus
使用步骤
-
创建实体类
-
创建mapper接口xml配置
//BaseMapper会自动将mapper与实体类关联,需要在配置类中使用@MapperScan扫描 @Repository //加Repository会交给IoC管理 public interface UserMapper extends BaseMapper<User> { }
-
在配置类上开启@MapperScan扫描,指定mapper接口的位置
-
使用mapper接口操作数据库
@SpringBootTest class MybatisPlusApplicationTests { @Autowired public UserMapper userMapper; @Test void contextLoads() { List<User> users = userMapper.selectList(null); System.out.println(users); } }
配置输出日志
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
主键类型
当不设置主键时,会为数据库插入id值默认为:全局唯一id。还会将MyBatis-Plus生成id赋值给实体类。
- 自动增长,当一张表记录达到一定数据量,进行分表操作,分表操作需要知道上一张表的最后一个id值。
- UUID:生成通用唯一识别码。随机生成,无法排序。
- redis生成
- 自带生成snowflake算法,生成19位的值
指定主键类型
@TableId(value = "id",type = IdType.ASSIGN_ID)
type的值
值 | 描述 |
---|---|
AUTO | 数据库ID自增 |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT | insert前自行set主键值 |
ASSIGN_ID | 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0) |
ASSIGN_UUID | 分配UUID,主键类型为String(since 3.3.0) |
自动填充
不用通过对象的setter方法对值进行设置,通过实现接口对值进行填充。例如设置创建修改时间。
-
在实体类上使用TableFiled注解指定属性fill及什么时候触发fill。
@TableField(fill = FieldFill.INSERT)//该字段首次insert时触发 private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE)//insert和更新时都会触发 private Date updateTime;
-
需要实现MetaObjectHandle接口来实现fill的具体操作。
@Component //交给容器才会生效? public class MyMetaObjectHandler implements MetaObjectHandler { //insert时触发的操作,metaObject表示表的元信息如字段名等 @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } //update时触发的操作 @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); } }