MyBatis-Plus介绍与项目起步讲解

 哈喽~大家好,MyBatis-Plus介绍与项目起步讲解。

 🥇个人主页:个人主页​​​​​             

 🥈 系列专栏:【Java框架】    

🥉与这篇相关的文章:            

Springboot 整合与文件配置Springboot 整合与文件配置_程序猿追的博客-CSDN博客
springboot 项目起步讲解及自动装配原理springboot 项目起步讲解及自动装配原理_程序猿追的博客-CSDN博客
Java 框架的一些文件配置Java 框架的一些文件配置_程序猿追的博客-CSDN博客

目录

  一、前言

1、特性(官网提供)

二、快速开始

1、创建项目

2、新建

3、单个查询

4、修改

5、删除

6、分页


  一、前言

MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。

MyBatisPlus的官网为:  https://mp.baomidou.com/

1、特性(官网提供)

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作,BaseMapper

强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,简单的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、创建项目

Spring Initializr

勾选要使用的技术

导入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.12</version>
</dependency>

yml配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
    username: root
    password: 123456
# 开启mp的日志(输出到控制台)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

实体类

import lombok.*;
​
//lombok
​
@Data
public class User {
    private Long id;
    private String name;
    private String password;
    private Integer age;
    private String tel;
}

dao 层

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

主启动类

//@MapperScan("com.itxzw.dao")
@SpringBootApplication
public class Mybatisplus01QuickstartApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(Mybatisplus01QuickstartApplication.class, args);
    }
​
}

说明:Dao接口要想被容器扫描到,有两种解决方案:

  • 方案一:在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中

    • 该方案的缺点是需要在每一Dao接口中添加注解

  • 方案二:在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包

    • 该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不写。

编写测试类

@Test
void testGetAll() {
    List<User> userList = userDao.selectList(null);
    System.out.println(userList);
}

效果

我们点击 selectList 进去看下,发现这是个接口 里面有 insert、delete、update等,这不就是crud吗?

2、新建

@Test
void testSave(){
    User user = new User();
    user.setName("阿萨德");
    user.setPassword("驱蚊器无");
    user.setAge(12);
    user.setTel("123123123");
    userDao.insert(user);
}

效果

3、单个查询

@Test
void testGetById(){
    User user = userDao.selectById(1586705016340967426L);
    System.out.println(user);
}

4、修改

@Test
void testUpdate(){
    User user = new User();
    user.setId(1586705016340967426L);
    user.setName("Tom8请问88");
    user.setPassword("tom12312888");
    userDao.updateById(user);
}

5、删除

@Test
void testDelete(){
    userDao.deleteById(1586705016340967426L);
}

这里我们分析一下

参数类型为什么是一个序列化类?

从这张图可以看出

  • String和Number是Serializable的子类,

  • Number又是Float,Double,Integer等类的父类,

  • 能作为主键的数据类型都已经是Serializable的子类,

  • MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。

6、分页

基础的增删改查就已经学习完了,刚才我们在分析基础开发的时候,有一个分页功能还没有实现,在MP中如何实现分页功能,就是咱们接下来要学习的内容。

分页查询使用的方法是:

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
  • IPage:用来构建分页查询条件

  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null

  • IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage

IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+h,会找到其有一个实现类为Page

@Test
void testGetByPage(){
    //IPage对象封装了分页操作相关的数据
    IPage page  = new Page(2,3);
    userDao.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());
}

分页拦截器

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加具体的拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}

效果

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿追

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值