一 使用方法

1.导入依赖

<!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

2.实体类

复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {


        private Long id;

        private String name;

        private Integer age;

        private String email;

}
复制代码

 

 

 

3.写一个继承了 BaseMapper  的类

@Repository
@Mapper
public interface UserMapper extends BaseMapper<User> {


}

4.可以在mapper类上加@Mapper注解或者在主启动类上加扫描包

@MapperScan("com.wang.dao")

二、主键策略

(1)ID_WORKER
MyBatis-Plus默认的主键策略是:ID_WORKER  全局唯一ID
参考资料:分布式系统唯一ID生成方案汇总:https://www.cnblogs.com/haoxinyue/p/5208136.html
 
(2)自增策略
  • 要想主键自增需要配置如下主键策略
    • 需要在创建数据表的时候设置主键自增
    • 实体字段中配置 @TableId(type = IdType.AUTO)
@TableId(type = IdType.AUTO)
private Long id;
、自动填充
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:
(1)数据库表中添加自动填充字段
在User表中添加datetime类型的新的字段 create_time、update_time,version
(2)实体上添加注解
 private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @TableField(fill = FieldFill.INSERT)
(3)实现元对象处理器接口
注意:不要忘记添加 @Component 注解
复制代码
@Component
public class MyMeteHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("createTime",new Date(),metaObject);
        setFieldValByName("updateTime",new Date(),metaObject);
        setFieldValByName("version",0,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("updateTime",new Date(),metaObject);

    }
}
复制代码

 四、乐观锁

1.

主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败
主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
(1)数据库中添加version字段
 
ALTER TABLE `user` ADD COLUMN `version` INT
(2)实体类添加version字段
并添加 @Version 注解
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;

(3)元对象处理器接口添加version的insert默认值

@Override
public void insertFill(MetaObject metaObject) {
    ......

    this.setFieldValByName("version", 1, metaObject);

}
(4)在 MybatisPlusConfig 中注册 Bean
创建配置类
复制代码
@Configuration
//@MapperScan("com.wang.dao")
public class MybatisPlusConfig {



    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}
复制代码

5.测试

 

 

五、分页插件

(1)创建配置类
此时可以删除主类中的 @MapperScan 扫描注解
/**
 * 分页插件
 */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
(2)测试selectPage分页
测试:最终通过page对象获取相关数据
复制代码
@Test
public void testSelectPage() {


  Page<User> page = new Page<>(1,5);

  userMapper.selectPage(page, null);//查到的数据会封装到page对象中


  page.getRecords().forEach(System.out::println);

  System.out.println(page.getCurrent());

  System.out.println(page.getPages());

  System.out.println(page.getSize());

  System.out.println(page.getTotal());

  System.out.println(page.hasNext());

  System.out.println(page.hasPrevious());

}
复制代码

 

六、分页插件

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据

逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

(1)数据库中添加 deleted字段
ALTER TABLE `user` ADD COLUMN `deleted` boolean
(2)实体类添加deleted 字段
并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;

 

(3)元对象处理器接口添加deleted的insert默认值

@Override
public void insertFill(MetaObject metaObject) {
    ......
    this.setFieldValByName("deleted", 0, metaObject);
}
(4)application.properties 加入配置
此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
(5)在 MybatisPlusConfig 中注册 Bean
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
(6)测试逻辑删除
  • 测试后发现,数据并没有被删除,deleted字段的值由0变成了1
  • 测试后分析打印的sql语句,是一条update
  • 注意:被删除数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作
 七、分页插件
性能分析拦截器,用于输出每条 SQL 语句及其执行时间
SQL 性能执行分析,开发环境使用,超过指定时间,停止运行。有助于发现问题1、配置插件
(1)参数说明
参数:maxTime: SQL 执行最大时长,超过自动停止运行,有助于发现问题。
参数:format: SQL是否格式化,默认false。

(2)在 MybatisPlusConfig 中配置

复制代码
/**
* SQL 执行性能分析插件
* 开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长
*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(100);//ms,超过此处设置的ms则sql不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
复制代码
(3)Spring Boot 中设置dev环境
#环境设置:dev、test、prod
spring.profiles.active=dev

 

 

 

可以针对各环境新建不同的配置文件application-dev.propertiesapplication-test.propertiesapplication-prod.properties

也可以自定义环境名称:如test1、test2
、其它
如果想进行复杂条件查询,那么需要使用条件构造器 Wapper,涉及到如下方法
1、delete
2、selectOne
3、selectCount
4、selectList
5、selectMaps
6、selectObjs
7、update
具体可以参考官网条件构造器 | MyBatis-Plus (baomidou.com)

posted on   upupup-999  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!



点击右上角即可分享
微信分享提示