SpringBoot系列:带你整合MybatisPlus

简介

MyBatis-Plus(简称 MP)是一个 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整合

该部分主要针对通过SpringBoot来构建MybatisPlus的环境搭建,以方便于日后的使用。

  • 新建SpringBoot项目,添加需要的依赖:

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!-- mybatisPlus 核心库 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.1.0</version>
            </dependency>
    
            <!-- 阿里数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.6</version>
            </dependency>
    
            <!-- MybatisPlus 代码生成器 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.2.0</version>
            </dependency>
            <!-- 模板引擎 -->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>2.0</version>
            </dependency>
    
  • 添加配置文件application.yml

    # 配置端口
    server:
      port: 8088
    spring:
      # 配置数据源
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/stu?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: 305118
        type: com.alibaba.druid.pool.DruidDataSource
    
    # mybatis-plus相关配置
    mybatis-plus:
      # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
      mapper-locations: classpath*:/mapper/**/*.xml
      global-config:
        db-config:
          #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
          id-type: auto
          #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
          field-strategy: NOT_EMPTY
          #数据库类型
          db-type: MYSQL
          #驼峰下划线转换
          column-underline: true
          logic-delete-value: -1
          logic-not-delete-value: 0
      configuration:
        # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
        map-underscore-to-camel-case: true
        # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
        call-setters-on-nulls: true
        # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
  • mybatisplus分页插件MybatisPlusConfig.java:

    /**
     * 配置分页插件
     */
    @Configuration
    public class MybatisPlusConfig {
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }
    
  • mybatisplus自动生成代码GeneratorCodeConfig.java:

    /**
     * mybatisplus  自动生产代码
     */
    public class GeneratorCodeConfig {
    
        public static void main(String[] args) {
            // 1、创建代码生成器
            AutoGenerator mpg = new AutoGenerator();
            // 2、全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
            gc.setOutputDir(projectPath + "/src/main/java");
            gc.setAuthor("twy");
            //生成后是否打开资源管理器
            gc.setOpen(false);
            //重新生成时文件是否覆盖
            gc.setFileOverride(false);
            //去掉Service接口的首字母I
            gc.setServiceName("%sService");
            //主键策略
            gc.setIdType(IdType.ID_WORKER_STR);
            //定义生成的实体类中日期类型
            gc.setDateType(DateType.ONLY_DATE);
            //实体开启Swagger2注解
            gc.setSwagger2(false);
            mpg.setGlobalConfig(gc);
    
            // 3、数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://localhost:3306/stu?serverTimezone=GMT%2B8");
            dsc.setDriverName("com.mysql.cj.jdbc.Driver");
            dsc.setUsername("root");
            dsc.setPassword("305118");
            dsc.setDbType(DbType.MYSQL);
            mpg.setDataSource(dsc);
    
            // 4、包配置
            PackageConfig pc = new PackageConfig();
            pc.setModuleName("mybatisplus"); //模块名
            //包  com.twy.mybatisplus
            pc.setParent("com.twy");
            //包  com.twy.mybatisplus.controller
            pc.setController("controller");
            pc.setEntity("entity");
            pc.setService("service");
            pc.setMapper("dao");
            mpg.setPackageInfo(pc);
    
            // 5、策略配置
            StrategyConfig strategy = new StrategyConfig();
            //表名
            strategy.setInclude("student_info");
            //数据库表映射到实体的命名策略
            strategy.setNaming(NamingStrategy.underline_to_camel);
            //生成实体时去掉表前缀
            strategy.setTablePrefix(pc.getModuleName() + "_");
            //数据库表字段映射到实体的命名策略
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            // lombok 模型 @Accessors(chain = true) setter链式操作
            strategy.setEntityLombokModel(true);
            //restful api风格控制器
            strategy.setRestControllerStyle(true);
            //url中驼峰转连字符
            strategy.setControllerMappingHyphenStyle(true);
            mpg.setStrategy(strategy);
    
            // 6、执行
            mpg.execute();
        }
    }
    

这里代码生成器也可以参考官网的:代码生成器

  • 使用代码自动生成器生成后的目录结构:
    在这里插入图片描述
  • 我们可以在controller写一个接口简单的测试一下:
    @RestController
    @RequestMapping("/mybatisplus/studentinfo")
    public class StudentInfoController {
    
        @Autowired
        private StudentInfoService studentInfoService;
    
        @GetMapping("/getInfo")
        public List<StudentInfo> getInfo(){
            List<StudentInfo> studentInfos = studentInfoService.list();
            return studentInfos;
        }
    }
    

在这里我们就使用了MybatisPlus在Service CRUD 封装的IService接口:
在这里插入图片描述
以上关于MybatisPlus的基本环境搭建就到这里,如果还是不怎么明白可以去官网看看学学

CRUD接口

我们在使用这个框架的使用可以直接去官网查看文档:CRUD接口

条件构造器

这一块,在日常的开发中我们写一些查询用的很多,如果记不住的不清楚的可以直接去官网查看:条件构造器

结束

以上这些在我们日常开发中用的比较多,但是框架里还有一些其它的知识这里就不一一阐述了,可以直接去官网学习一下文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值