栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis-Plus使用记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis-Plus使用记录

目录

简介:

 springboot整合mybatis-plus

1.在springboot项目中添加mybatis-plus依赖

2.配置mybatis-plus参数 

3.启动类修改

关于mybatis-plus插件与特性

1. 主键自动生成

2.支持 ActiveRecord 模式

3.代码生成器.

 4.内置分页插件

5. 内置性能分析插件

 6.自动填充

7.乐观锁

8.逻辑删除


简介:

        mybatis-plus是一个mybatis的增强工具,只是在mybatis的基础上只做了增强,不做改变,为简化开发而生,提高效率而生.

特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

 springboot整合mybatis-plus

1.在springboot项目中添加mybatis-plus依赖

     com.baomidou
     mybatis-plus-boot-starter
     3.4.0



     mysql
     mysql-connector-java
     8.0.26
     runtime

如果只是用mybatis-plus 只添加这两个个依赖就可以了  如果需要使用代码生成工具,还需要添加下面的依赖

        
            com.baomidou
            mybatis-plus-generator
            3.4.0
        
        
        
            org.apache.velocity
            velocity-engine-core
            2.3
        
        
            org.slf4j
            slf4j-simple
            2.0.0-alpha5
            test
        
        
        
            org.projectlombok
            lombok
            true
        
        
            com.github.xiaoymin
            swagger-bootstrap-ui
            1.9.6
        
        
            io.springfox
            springfox-swagger2
            2.9.2
        
        

关于代码生成工具的使用请看Mybatis-Plus Generator代码自动生成工具体验_if_icanfly的博客-CSDN博客AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。1.导入依赖 ,需要引用的依赖如下 com.baomidou mybatis-plus-g...https://blog.csdn.net/if_icanfly/article/details/120528799?spm=1001.2014.3001.5501

2.配置mybatis-plus参数 

配置文件application.properties中添加如下配置(未配置连接池信息)

## 数据源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blogs?characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
## mybatis-plus 配置
# 控制台打印sql
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# mapper.xml路径
mybatis-plus.mapper-locations=classpath:mapper
    List selectAllComments(Page page, Object o);
}

2.2在xml中添加这个查询的方法





    

测试:

    @Test
    public void addTest() {
        // 1.表示第一页 10表示查10调数据
        Page page = new Page<>(1, 10);

        //我们自己写的sql也可以添加分页,只需要向上面的selectPage一样 传入一个分页参数page
        commentsMapper.selectAllComments(page, null);

    }

查询结果:

5. 内置性能分析插件

 注册性能分析插件 IllegalSQLInnerInterceptor

@Configuration
public class MybatisConfig {

    // mybatis-plus插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件 注意数据库的类型 这里使用的mysql
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // sql 性能规范插件
        interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());
        return interceptor;
    }
}

关于性能分析插件的描述,在源码中的描述如下

 个人觉得要加这玩意就要在项目刚开始的时候加,做了一半或者完成了才加会让你想死

比如:mybatis-plus自带的分页查询 如果最后生成的sql查询没带where条件就会报错

  @Test
    public void addTest() {
        // 1.表示第一页 10表示查10调数据
        Page page = new Page<>(1, 10);
        // 构建查询条件对象
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("id","10");
        //commentsMapper.selectPage(page, wrapper);
        // 如果没有查询条件 这里的wrapper可以传null
        commentsMapper.selectPage(page, null);

        //我们自己写的sql也可以添加分页,只需要向上面的selectPage一样 传入一个分页参数page
        //commentsMapper.selectAllComments(page, null);

    }

上面mybatis-plus自带的selectPage 没有条件的时候生成的sql是没有where条件的 这时候执行先查询就会报一个非法sql的错误

         3.2.0版本以后去掉了PerformanceInterceptor 之前的性能分析插件可以设置最大执行时间,通过设置这个时间我们能筛选出执行效率极差的sql 但是在3.2.0以后去掉了这个插件 

 6.自动填充

 阿里巴巴开发手册: 所有的数据库表,gmt_create,gmt_modified都要配上 而且需要自动化

方式一就是设置数据库字段默认值为当前时间 且为自动更新

创建时间设置默认值为CURRENT_TIMESTAMP 系统当前时间 

更新时间也设置为系统当前时间,并且勾选自动更新

 方式二 代码级别的

首先不需要设置数据库的自动更新与默认时间

 实体类需要添加注解

 编写一个处理器来处理这个注解

@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);
    }
}

7.乐观锁

首先在实体类中 锁字段加上注解

 然后注册乐观锁组件

@Configuration
public class MybatisConfig {

    // mybatis-plus插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件 注意数据库的类型 这里使用的mysql
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // sql 性能规范插件
        interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());
        // 乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

这里更新历史数据,如果version是后面才加的字段,已有的历史数据如果该字段为null 更新的时候不会添加varsion条件 

8.逻辑删除

实体类中逻辑删除字段添加注解@TableLogic

 application.properties 添加逻辑删除的配置项

# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
mybatis-plus.global-config.db-config.logic-delete-field=deleted
# 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0

上面的配置中 如果未删除是0 已删除是1 则可只配置逻辑删除的字段名称即可 

官网给的配置就是上面的配置 但是在3.4.0版本中 我并没有在application.properties中添加上面的配置,实际删除的时候 依然会走逻辑删除  大胆猜测一下,估计只要实体类配置了tablelogic注解就会生效把 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276465.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号