本文最后更新于:February 19, 2022 pm
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。支持任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库。
目录 主键策略 @TableId(type = IdType.AUTO) private Long id;
其中,不同的策略:
public enum IdType { AUTO(0 ), NONE(1 ), INPUT(2 ), ASSIGN_ID(3 ), ASSIGN_UUID(4 ); }
插入 int insert = userMapper.insert(User user);
更新 @Test void upda () { User user = new User(); user.setId(3L ); user.setAge(23 ); int i = userMapper.updateById(user); }
此方法,没有传入的值不会进行修改。(自动拼接动态SQL)
自动填充 方式一 数据库修改。给字段添加自动更新。
方式二 用代码实现。需要先删除对应字段的默认值、自动更新。
方法 步骤:
给实体类对应字段添加注解。
编写处理器。
给实体类对应字段添加注解。
给实体类添加注解。
@TableField(fill = FieldFill.UPDATE) private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE) private Date inTime;
其他值:
public enum FieldFill { DEFAULT, INSERT, UPDATE, INSERT_UPDATE; }
编写处理器。
处理器的编写看你用了哪一种策略,如果是插入时就编写插入的处理;如果是更新时就编写更新时的处理。在上面的实体类中,使用了插入和更新,所有需要变成这两个的处理策略。
createTime是更新时,inTime是插入和更新时。
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 package com.tothefor.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("inTime" ,new Date(),metaObject); } @Override public void updateFill (MetaObject metaObject) { this .setFieldValByName("inTime" ,new Date(),metaObject); this .setFieldValByName("createTime" ,new Date(),metaObject); } }
在插入或者更新时,对应的字段会更新。对应时间格式,会自动填充。所以不用担心Java时间和MySQL时间的格式问题。
查询 userMapper.selectById(); userMapper.selectList(); userMapper.selectBatchIds(); userMapper.selectByMap(); ....
分页查询
配置插件类。
使用。
插件配置类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package com.tothefor.config;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.transaction.annotation.EnableTransactionManagement;@EnableTransactionManagement @MapperScan("com.tothefor.mapper") @Configuration public class MyPageHelper { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor () { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); return interceptor; } }
测试 @Test void page () { Page<User> page = new Page<>(3 ,2 ); userMapper.selectPage(page, null ); List<User> records = page.getRecords(); records.forEach(it -> System.out.println(it)); System.out.println(page.getPages()); System.out.println(page.getTotal()); System.out.println(page.getRecords().size()); System.out.println(page.getCurrent()); System.out.println(page.getSize()); }
删除 @Test void del () { userMapper.delete(); userMapper.deleteBatchIds(); userMapper.deleteById(); userMapper.deleteByMap(); }
逻辑删除 官方文档
需要添加一个判断是否删除的字段(如:is_delete)。
步骤:
数据库添加字段。
修改实体类,添加注解@TableLogic。
写配置。
@TableLogic private boolean isDelete;
配置:
mybatis-plus: global-config: db-config: logic-delete-field: isDelete logic-delete-value: true logic-not-delete-value: false
使用同删除方法一样使用。