• Mybatis-plus 学习分享


    一、MybatisPlus简介

    1. MyBatis介绍

    2. MyBatisPlus特性

    • 无侵入:只做增强不做改变,不会对现有工程产生影响
    • 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
    • 支持 Lambda:编写查询条件无需担心字段写错
    • 支持主键自动生成
    • 内置分页插件
    • ……

    1.1 SpringBoot整合MyBatisPlus入门程序

    ①:创建新模块,选择Spring初始化,并配置模块相关基础信息
    在这里插入图片描述
    ②:选择当前模块需要使用的技术集(仅保留JDBC)
    在这里插入图片描述
    ③:手动添加MyBatisPlus起步依赖

    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-boot-starterartifactId>
        <version>3.4.1version>
    dependency>
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.1.16version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意事项1:由于mp并未被收录到idea的系统内置配置,无法直接选择加入

    注意事项2:如果使用Druid数据源,需要导入对应坐标

    二、标准数据开发

    2.1 MybatisPlus的CRUD操作

    在这里插入图片描述

    2.2 Lombok插件介绍

    有什么简单的方法可以自动生成实体类的GET、SET方法?

    • Lombok,一个java类库,提供了一组注解,简化POJO实体类开发。
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.12version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    常用注解@Data,为当前实体类在编译期设置对应的get/set方法,无参/无参构造方法,toString方法,hashCode方法,equals方法等

    package com.itheima.domain;
    
    import lombok.*;
    /*
        1 生成getter和setter方法:@Getter、@Setter
          生成toString方法:@ToString
          生成equals和hashcode方法:@EqualsAndHashCode
    
        2 统一成以上所有:@Data
    
        3 生成空参构造: @NoArgsConstructor
          生成全参构造: @AllArgsConstructor
    
        4 lombok还给我们提供了builder的方式创建对象,好处就是可以链式编程。 @Builder【扩展】
     */
    @Data
    public class User {
        private Long id;
        private String name;
        private String password;
        private Integer age;
        private String tel;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2.3 MybatisPlus分页功能

    • 思考一下Mybatis分页插件是如何用的?

    2.3.1 分页功能接口

    在这里插入图片描述

    2.3.2 MyBatisPlus分页使用

    ①:设置分页拦截器作为Spring管理的bean

    package com.itheima.config;
    
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MybatisPlusConfig {
        
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            //1 创建MybatisPlusInterceptor拦截器对象
            MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
            //2 添加分页拦截器
            mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mpInterceptor;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    ②:执行分页查询

    //分页查询
    @Test
    void testSelectPage(){
        //1 创建IPage分页对象,设置分页参数
        IPage<User> page=new Page<>(1,3);
        //2 执行分页查询
        userDao.selectPage(page,null);
        //3 获取分页结果
        System.out.println("当前页码值:"+page.getCurrent());
        System.out.println("每页显示数:"+page.getSize());
        System.out.println("总页数:"+page.getPages());
        System.out.println("总条数:"+page.getTotal());
        System.out.println("当前页数据:"+page.getRecords());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    三、DQL编程控制

    3.1 条件查询方式

    • MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合
      在这里插入图片描述

    3.2 常用查询条件设定

    多条件查询有哪些组合?

    • 范围匹配(> 、 = 、between)
    • 模糊匹配(like)
    • 空判定(null)
    • 包含性匹配(in)
    • 分组(group)
    • 排序(order)
    • ……

    3.3 查询API

    四、快速开发 代码生成器

    如果只给一张表的字段信息,能够推演出Domain、Dao层的代码?

    4.1 MybatisPlus 提供模板

    • Mapper接口模板
      在这里插入图片描述
    • 实体对象类模板

    在这里插入图片描述

    4.2 工程搭建和基本代码编写

    • 第一步:创建SpringBoot工程,添加代码生成器相关依赖,其他依赖自行添加
    
    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-generatorartifactId>
        <version>3.4.1version>
    dependency>
    
    
    <dependency>
        <groupId>org.apache.velocitygroupId>
        <artifactId>velocity-engine-coreartifactId>
        <version>2.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 第二步:编写代码生成器类
    package com.itheima;
    
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
    
    public class Generator {
        public static void main(String[] args) {
            //1. 创建代码生成器对象,执行生成代码操作
            AutoGenerator autoGenerator = new AutoGenerator();
    
            //2. 数据源相关配置:读取数据库中的信息,根据数据库表结构生成代码
            DataSourceConfig dataSource = new DataSourceConfig();
            dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
            autoGenerator.setDataSource(dataSource);
    
             //3. 执行生成操作
            autoGenerator.execute();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4.3 开发者自定义配置

    • 设置全局配置
    //设置全局配置
    GlobalConfig globalConfig = new GlobalConfig();
    globalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatisplus_04_generator/src/main/java");    //设置代码生成位置
    globalConfig.setOpen(false);    //设置生成完毕后是否打开生成代码所在的目录
    globalConfig.setAuthor("黑马程序员");    //设置作者
    globalConfig.setFileOverride(true);     //设置是否覆盖原始生成的文件
    globalConfig.setMapperName("%sDao");    //设置数据层接口名,%s为占位符,指代模块名称
    globalConfig.setIdType(IdType.ASSIGN_ID);   //设置Id生成策略
    autoGenerator.setGlobalConfig(globalConfig);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 设置包名相关配置
    //设置包名相关配置
    PackageConfig packageInfo = new PackageConfig();
    packageInfo.setParent("com.aaa");   //设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径
    packageInfo.setEntity("domain");    //设置实体类包名
    packageInfo.setMapper("dao");   //设置数据层包名
    autoGenerator.setPackageInfo(packageInfo);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 策略设置
    //策略设置
    StrategyConfig strategyConfig = new StrategyConfig();
    strategyConfig.setInclude("tbl_user");  //设置当前参与生成的表名,参数为可变参数
    strategyConfig.setTablePrefix("tbl_");  //设置数据库表的前缀名称,模块名 = 数据库表名 - 前缀名  例如: User = tbl_user - tbl_
    strategyConfig.setRestControllerStyle(true);    //设置是否启用Rest风格
    strategyConfig.setVersionFieldName("version");  //设置乐观锁字段名
    strategyConfig.setLogicDeleteFieldName("deleted");  //设置逻辑删除字段名
    strategyConfig.setEntityLombokModel(true);  //设置是否启用lombok
    autoGenerator.setStrategy(strategyConfig);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    说明:在资料中也提供了CodeGenerator代码生成器类,根据实际情况修改后可以直接使用。

  • 相关阅读:
    Android webview加载网页实时调试
    【设计模式】JAVA Design Patterns——Iterator(迭代器模式)
    C++核心编程
    如何通过Photoshop制作Gif图片(把几张图片合成一张Gif图片)
    微服务架构
    企业开发中名词解析— —加密与脱敏及部分开发规范
    淘宝API详情接口调用示例
    解决Win10系统按 Win+L 键不能锁屏的问题
    如何在Vue中实现事件处理?
    SpringBoot整理-Actuator
  • 原文地址:https://blog.csdn.net/qq_51451731/article/details/126055000