SpringBoot---------整合Mybatisplus

快速入门

第一步:导入依赖

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>

第二步:编写mapper层,最最最重要的点: extends BaseMapper<Pojo>,就可以不用再编写Mapper层的方法以及SQL查询语句

package com.example.springboot_learn.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.example.springboot_learn.Pojo.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface usermapper extends BaseMapper<User> {
    
}

 第三步:使用mybatisplus

#mybatis的日志
mybatis-plus:
  //日志显示
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  //关掉图标
  global-config:
    banner: false

① 普通查询:

 @Test
    void testum(){

        //新增数据
        User user=new User(6,"zzl",55,"test6baomidou.com");
        um.insert(user);


        //查询全部
        List<User> userslist = um.selectList(null);
        System.out.println(userslist);

        //参数ID查询
        User user1 = um.selectById(2);
        System.out.println("user1 = " + user1);

        //修改数据,这里有个注意点:只会修改你赋的值,未初始化的值不做修改
        User user2=new User();
        user2.setId(5);
        user2.setName("zzlyyds");
        um.updateById(user2);

        //删除数据
        um.deleteById(6);
    }

 

② 分页查询:

    @Test
    void tset02(){

        //分页查询,要使用拦截器实现该功能
        //1:显示第1页      2:一页多少条数据
        IPage page = new Page(1,2);
        um.selectPage(page,null);
        //显示第几页
        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());

    }

 分页查询的拦截器配置:

package com.example.springboot_learn;

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 mpConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {

        //定义Mybatisplus
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //添加具体的分页查询的拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());


        return interceptor;
    }
}

 

 ③条件查询以及多条件查询(LambdaQueryWrapper<User>):

@Test
    void tset03(){

        //方式一
        //按条件查询,由QueryWrapper对象来实现
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.lt("age",20);
        List<User> userslist = um.selectList(wrapper);
        System.out.println(userslist);


        //方式二
        QueryWrapper<User> wrapper1 = new QueryWrapper<User>();
        wrapper1.lambda().gt(User::getAge,20);
        List<User> userslist1 = um.selectList(wrapper1);
        System.out.println(userslist1);



        //方式三,主用!!!!
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<User>();
        lambdaQueryWrapper.gt(User::getAge,25);
        List<User> userslist2 = um.selectList(lambdaQueryWrapper);
        System.out.println(userslist2);


        //链式编程写多条件查询
        LambdaQueryWrapper<User> lambdaQueryWrapper1 = new LambdaQueryWrapper<User>();

        //and操作
        lambdaQueryWrapper1.lt(User::getAge,25).gt(User::getAge,20);
        //or操作
        lambdaQueryWrapper1.lt(User::getAge,25).or().gt(User::getAge,20);

        userslist2 = um.selectList(lambdaQueryWrapper1);
        System.out.println(userslist2);
    }

 

④查询投影,分组,排序,范围查询

        //字段筛选
        wrapper.select("age");
        //分组
        wrapper.groupBy("age");
        //排序
        wrapper.orderByAsc("age");
        wrapper.orderByDesc("age");
        //等值
        wrapper.eq("age",18);
        //范围查询gt ge  lt le  eq  between
        wrapper.gt("age",18);
        //模糊匹配
        wrapper.likeRight("name","h");
        wrapper.likeLeft("name","j"); 

 

 ⑤数据库表名与编程变量名映射,控制字段不投影,添加自定义变量

表名: @TableName("user")

字段匹配以及不做字段投影:@TableField(value = 'pwd' ,select = false)

添加属性:@TableField(exist = false)

 

⑥ID自增策略

    @TableId(type = IdType.AUTO)
    @TableId(type = IdType.ASSIGN_ID)
    @TableId(type = IdType.INPUT)
    @TableId(type = IdType.NONE)
    @TableId(type = IdType.UUID)
    private Integer id;

雪花ID的组成

表名前缀以及雪花算法的全局配置

#mybatis的配置
mybatis-plus:
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: false
    db-config:
      id-type: assign_id
      table-prefix: tbl_

 

 ⑦多数据操作(BatchIds)

        List<Long> list = new ArrayList<>();
        //多数据删除
        um.deleteBatchIds(list);
        //多数据查询
        um.selectBatchIds(list);

 

⑧逻辑删除,实现只进行逻辑删除,而不是直接删除数据库中的表数据

添加数据库字段deleted

全局配置

#mybatis的配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: false
    db-config:
      id-type: assign_id
      //逻辑删除
      logic-not-delete-value: 0
      logic-delete-value: 1

⑨乐观锁:解决多线程并发问题

步骤一:添加数据库字段version

 步骤二:添加字段的@version注解

步骤三:添加拦截器

步骤四:实现

⑩代码生成器

 

Mybatisplus

 特点:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

相关推荐

  1. SpringBoot3整合MyBatisPlus

    2024-04-25 07:10:03       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 07:10:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 07:10:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 07:10:03       87 阅读
  4. Python语言-面向对象

    2024-04-25 07:10:03       96 阅读

热门阅读

  1. 平时学习得到的

    2024-04-25 07:10:03       37 阅读
  2. 开源协议与商业许可:选择与遵循

    2024-04-25 07:10:03       40 阅读
  3. RabbitMQ spring boot TTL延时消费

    2024-04-25 07:10:03       36 阅读
  4. rabbitmq报错

    2024-04-25 07:10:03       38 阅读
  5. 富格林:正确曝光做单欺诈套路

    2024-04-25 07:10:03       36 阅读
  6. AIGC:机器人也有“成长的烦恼”

    2024-04-25 07:10:03       33 阅读
  7. 区块链 | ERC721 标准

    2024-04-25 07:10:03       121 阅读