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


    快速入门

    第一步:导入依赖

    1. <dependency>
    2. <groupId>org.mybatis.spring.boot</groupId>
    3. <artifactId>mybatis-spring-boot-starter</artifactId>
    4. <version>2.3.1</version>
    5. </dependency>

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

    1. package com.example.springboot_learn.mapper;
    2. import com.baomidou.mybatisplus.mapper.BaseMapper;
    3. import com.example.springboot_learn.Pojo.User;
    4. import org.apache.ibatis.annotations.Mapper;
    5. @Mapper
    6. public interface usermapper extends BaseMapper<User> {
    7. }

     第三步:使用mybatisplus

    1. #mybatis的日志
    2. mybatis-plus:
    3. //日志显示
    4. configuration:
    5. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    6. //关掉图标
    7. global-config:
    8. banner: false

    ① 普通查询:

    1. @Test
    2. void testum(){
    3. //新增数据
    4. User user=new User(6,"zzl",55,"test6baomidou.com");
    5. um.insert(user);
    6. //查询全部
    7. List userslist = um.selectList(null);
    8. System.out.println(userslist);
    9. //参数ID查询
    10. User user1 = um.selectById(2);
    11. System.out.println("user1 = " + user1);
    12. //修改数据,这里有个注意点:只会修改你赋的值,未初始化的值不做修改
    13. User user2=new User();
    14. user2.setId(5);
    15. user2.setName("zzlyyds");
    16. um.updateById(user2);
    17. //删除数据
    18. um.deleteById(6);
    19. }

     

    ② 分页查询:

    1. @Test
    2. void tset02(){
    3. //分页查询,要使用拦截器实现该功能
    4. //1:显示第1页 2:一页多少条数据
    5. IPage page = new Page(1,2);
    6. um.selectPage(page,null);
    7. //显示第几页
    8. System.out.println(page.getCurrent());
    9. //显示每页大小
    10. System.out.println(page.getSize());
    11. //显示一共有多少页
    12. System.out.println(page.getPages());
    13. //显示一共用多少条数据
    14. System.out.println(page.getTotal());
    15. //显示该页的数据
    16. System.out.println(page.getRecords());
    17. }

     分页查询的拦截器配置:

    1. package com.example.springboot_learn;
    2. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    3. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. @Configuration
    7. public class mpConfig {
    8. @Bean
    9. public MybatisPlusInterceptor mybatisPlusInterceptor() {
    10. //定义Mybatisplus
    11. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    12. //添加具体的分页查询的拦截器
    13. interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    14. return interceptor;
    15. }
    16. }

     

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

    1. @Test
    2. void tset03(){
    3. //方式一
    4. //按条件查询,由QueryWrapper对象来实现
    5. QueryWrapper wrapper = new QueryWrapper();
    6. wrapper.lt("age",20);
    7. List userslist = um.selectList(wrapper);
    8. System.out.println(userslist);
    9. //方式二
    10. QueryWrapper wrapper1 = new QueryWrapper();
    11. wrapper1.lambda().gt(User::getAge,20);
    12. List userslist1 = um.selectList(wrapper1);
    13. System.out.println(userslist1);
    14. //方式三,主用!!!!
    15. LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper();
    16. lambdaQueryWrapper.gt(User::getAge,25);
    17. List userslist2 = um.selectList(lambdaQueryWrapper);
    18. System.out.println(userslist2);
    19. //链式编程写多条件查询
    20. LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper();
    21. //and操作
    22. lambdaQueryWrapper1.lt(User::getAge,25).gt(User::getAge,20);
    23. //or操作
    24. lambdaQueryWrapper1.lt(User::getAge,25).or().gt(User::getAge,20);
    25. userslist2 = um.selectList(lambdaQueryWrapper1);
    26. System.out.println(userslist2);
    27. }

     

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

    1. //字段筛选
    2. wrapper.select("age");
    3. //分组
    4. wrapper.groupBy("age");
    5. //排序
    6. wrapper.orderByAsc("age");
    7. wrapper.orderByDesc("age");
    8. //等值
    9. wrapper.eq("age",18);
    10. //范围查询gt ge lt le eq between
    11. wrapper.gt("age",18);
    12. //模糊匹配
    13. wrapper.likeRight("name","h");
    14. wrapper.likeLeft("name","j");

     

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

    表名: @TableName("user")

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

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

     

    ⑥ID自增策略

    1. @TableId(type = IdType.AUTO)
    2. @TableId(type = IdType.ASSIGN_ID)
    3. @TableId(type = IdType.INPUT)
    4. @TableId(type = IdType.NONE)
    5. @TableId(type = IdType.UUID)
    6. private Integer id;

    雪花ID的组成

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

    1. #mybatis的配置
    2. mybatis-plus:
    3. # configuration:
    4. # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    5. global-config:
    6. banner: false
    7. db-config:
    8. id-type: assign_id
    9. table-prefix: tbl_

     

     ⑦多数据操作(BatchIds)

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

     

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

    添加数据库字段deleted

    全局配置

    1. #mybatis的配置
    2. mybatis-plus:
    3. configuration:
    4. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    5. global-config:
    6. banner: false
    7. db-config:
    8. id-type: assign_id
    9. //逻辑删除
    10. logic-not-delete-value: 0
    11. 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

  • 相关阅读:
    vue2中年份季度选择器(需要安装element)
    虚拟机上部署K8S集群
    怎么从A和B仓库执行分别fetch操作?
    深入理解ElasticSearch分片
    acclerator和tensorboard共同使用采坑记录
    【atcoder】abc312~abc321题解
    Ph.D,一个Permanent head Damage的群体
    《Flowable流程引擎从零到壹》引入日志框架和部署流程定义
    在线会议中人脸面部轮廓图像提取(三)——Dlib库人脸面部轮廓图像特征提取
    Vue之ElementUI实现登陆及注册
  • 原文地址:https://blog.csdn.net/qq_62366797/article/details/138094720