首页 > 其他分享 >MyBatis-plus学习笔记

MyBatis-plus学习笔记

时间:2023-06-06 15:13:38浏览次数:55  
标签:插件 System 笔记 println plus MyBatis out page Lambda

1、MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2、特性:

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

3、Lambda表达式

Lambda 表达式是 Java 8 中引入的一种新特性,它可以用更简洁的语法来表示匿名函数。Lambda 表达式通常由三个部分组成:

  1. 形参列表:使用小括号 () 括起来,多个参数之间使用逗号分隔。

  2. 箭头符号:用于连接形参列表和 Lambda 表达式的主体部分,可以是 -> 或者 ::。

  3. Lambda 表达式的主体:可以是一个表达式,也可以是一个代码块。如果是一个表达式,则不需要使用 return 关键字返回值;如果是一个代码块,则需要使用大括号 {} 括起来,并使用 return 关键字返回值。

Lambda 表达式的语法如下:

(parameters) -> expression

或者

(parameters) -> { statements; }

其中 parameters 是形参列表,expression 是单个表达式,statements 是一组语句。

Lambda 表达式还可以使用预定义的函数式接口,例如 Runnable、Consumer、Predicate 等,以简化代码的编写。以下是一个使用 Predicate 接口的示例:

List<String> list = Arrays.asList("Java", "Python", "C++", "JavaScript");
Predicate<String> predicate = s -> s.startsWith("J");
list.stream().filter(predicate).forEach(System.out::println); // 输出 Java JavaScript

以上代码中,我们首先创建了一个 Predicate 对象,用于过滤以字母 J 开头的字符串。然后使用 stream() 方法将 List 转化为流,再使用 filter() 方法对流进行过滤,最后使用 forEach() 方法遍历输出结果。

 

4、条件构造器(Wrapper

  • Wrapper:条件构造器抽象类,最顶端的父类
    • AbstractWrapper:查询条件封装抽象类,生成 SQL 的 where 条件
      • QueryWrapper:用于对象封装
      • UpdateWrapper:用于条件封装
    • AbstractLambdaWrapper:Lambda 语法使用 Wrapper
      • LambdaQueryWrapper:用于对象封装,使用 Lambda 语法
      • LambdaUpdateWrapper:用于条件封装,使用 Lambda 语法

 

@SpringBootTest
@MapperScan("com.wwj.mybatisplusdemo.mapper")
class MybatisplusDemoApplicationTests {

    @Autowired
    private EmployeeMapper employeeMapper;

    @Test
    void contextLoads() {
        // 查询名字中包含'j',年龄大于20岁,邮箱不为空的员工信息
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.like("last_name", "j");
        wrapper.gt("age", 20);
        wrapper.isNotNull("email");
        List<Employee> list = employeeMapper.selectList(wrapper);
        list.forEach(System.out::println);
    }
}

  

@Test
void contextLoads() {
    // 查询名字中包含'j',年龄大于20岁,邮箱不为空的员工信息
    LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<Employee>()
        .like(Employee::getLastName,"j")
        .gt(Employee::getAge,20)
        .isNotNull(Employee::getEmail);
    List<Employee> list = employeeMapper.selectList(wrapper);
    list.forEach(System.out::println);
}

  UpdateWrapper 与 QueryWrapper 不同,它的作用是封装更新内容的,比如:

@Test
void contextLoads() {
    UpdateWrapper<Employee> wrapper = new UpdateWrapper<Employee>()
        .set("age", 50)
        .set("email", "[email protected]")
        .like("last_name", "j")
        .gt("age", 20);
    employeeMapper.update(null, wrapper);
}

  

5、分页插件

对于分页功能,MyBatisPlus 提供了分页插件,只需要进行简单的配置即可实现:

@Configuration
public class MyBatisConfig {

    /**
     * 注册分页插件
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

  接下来我们就可以使用分页插件提供的功能了:

@Test
void contextLoads() {
    Page<Employee> page = new Page<>(1,2);
    employeeService.page(page, null);
    List<Employee> employeeList = page.getRecords();
    employeeList.forEach(System.out::println);
    System.out.println("获取总条数:" + page.getTotal());
    System.out.println("获取当前页码:" + page.getCurrent());
    System.out.println("获取总页码:" + page.getPages());
    System.out.println("获取每页显示的数据条数:" + page.getSize());
    System.out.println("是否有上一页:" + page.hasPrevious());
    System.out.println("是否有下一页:" + page.hasNext());
}

  倘若在分页过程中需要限定一些条件,我们就需要构建 QueryWrapper 来实现:

@Test
void contextLoads() {
    Page<Employee> page = new Page<>(1, 2);
    employeeService.page(page, new QueryWrapper<Employee>()
                         .between("age", 20, 50)
                         .eq("gender", 1));
    List<Employee> employeeList = page.getRecords();
    employeeList.forEach(System.out::println);
}

  

标签:插件,System,笔记,println,plus,MyBatis,out,page,Lambda
From: https://www.cnblogs.com/coooookie/p/17460590.html

相关文章

  • MybatisPlus代码生成器
    MybatisPlus代码生成器这里讲解的是新版(mybatis-plus3.5.1+版本),旧版不兼容官方文档:https://baomidou.com/(建议多看看官方文档,每种功能里面都有讲解)https://cloud.tencent.com/developer/article/2119707配置这里的配置表格和官方文档一致手动配置代码生成器建表,插入数......
  • 尚硅谷ts笔记
    第一章快速入门0、TypeScript简介TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以直接当成JS使用。相较于JS而言,TS拥有了静态类......
  • 统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8
    前言  上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码。<br>统信UOS系统版本  系统版本:  Qt源码下载  参考博文《获取下载Qt安装包,Qt源码全国网址备忘录(不用注册Qt账户,即可下载各版本Qt安装包和Qt源......
  • 考古笔记14:访问控制列表ACL详解(真的很详细)
    访问控制列表 ACL(AccessControlList,访问控制列表)        技术从来都是一把双刃剑,网络应用与互联网的普及在大幅提高企业的生产经营效率的同时,也带来了诸如数据的安全性,员工利用互联网做与工作不相干事等负面影响。如何将一个网络有效的管理起来,尽可能的降低网络所带......
  • 字符集问题(mybatis 插入mysql中文乱码,入参是中文)
    1.启动/停止/重启/状态servicemysqldstartservicemysqldstopservicemysqldrestartservicemysqldstatus  mysqld是守护进程脚本,init.d不是mysql的home2.home/进入控制台/usr/lib64/mysqlmysql-uroot-p切换数据库usesomedb查看该数据库字符集......
  • mybatis参数处理2
    1. 多个参数  811.1  需求:通过name和sex查询  81test中的com.powernode.mybatis.testStudentMapperTest类中的testSelectByNameAndSex//多个参数81@TestpublicvoidtestSelectByNameAndSex(){SqlSessionsqlSession=SqlSessionUtil.openSession();......
  • JAVA学习笔记基础篇_02
    ------------恢复内容开始------------#java高级应用1.补充当方法中不存在与对象相关的方法时比如直接的数字计算输出等都可以写成静态方法集合成一个工具类1.类变量与类方法(静态变量/静态方法)也就是记录变量和方法的使用次数,每次随着类的生成而生成随着类的......
  • mybatis查询语句专题
    前言:打包⽅式:jar 引⼊依赖:mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。 引⼊配置⽂件:jdbc.properties、mybatis-config.xml、logback.xml 创建pojo类:Car 创建Mapper接⼝:CarMapper 创建Mapper接⼝对应的映射⽂件:com/powernode/mybatis/mapper/CarMapper.xml 创建单......
  • [笔记]计算机网络_数据链路层_数据链路层概述
    大的要来力(悲)数据链路层是历年考试重点,要求在了解数据链路层基本概念的基础上,重点掌握滑动窗口机制、三种可靠传输协议、各种MAC协议、HDLC协议、PPP协议,特别是CSMA/CD协议和以太网帧格式,以及局域网的争用期和最小帧长的概念、二进制指数退避算法等等各种贵物,此外中继器、网卡......
  • 运用赋能计算方法,在网格层面量化东莞外卖垃圾产生情况笔记
    原文链接:Fullarticle:QuantifythefooddeliverypackagewastegenerationofDongguaningridlevelusingempowermentcalculationmethod(tandfonline.com) ......