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


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

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

     🥈 系列专栏:【Java框架】    

    🥉与这篇相关的文章:            

    目录

      一、前言

    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

    勾选要使用的技术

    导入依赖

    1. <dependency>
    2.    <groupId>com.alibabagroupId>
    3.    <artifactId>druid-spring-boot-starterartifactId>
    4.    <version>1.2.12version>
    5. dependency>

    yml配置

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

    实体类

    1. import lombok.*;
    2. //lombok
    3. @Data
    4. public class User {
    5.    private Long id;
    6.    private String name;
    7.    private String password;
    8.    private Integer age;
    9.    private String tel;
    10. }

    dao 层

    1. @Mapper
    2. public interface UserDao extends BaseMapper {
    3. }

    主启动类

    1. //@MapperScan("com.itxzw.dao")
    2. @SpringBootApplication
    3. public class Mybatisplus01QuickstartApplication {
    4.    public static void main(String[] args) {
    5.        SpringApplication.run(Mybatisplus01QuickstartApplication.class, args);
    6.   }
    7. }

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

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

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

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

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

    编写测试类

    1. @Test
    2. void testGetAll() {
    3.    List userList = userDao.selectList(null);
    4.    System.out.println(userList);
    5. }

    效果

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

    2、新建

    1. @Test
    2. void testSave(){
    3.    User user = new User();
    4.    user.setName("阿萨德");
    5.    user.setPassword("驱蚊器无");
    6.    user.setAge(12);
    7.    user.setTel("123123123");
    8.    userDao.insert(user);
    9. }

    效果

    3、单个查询

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

    4、修改

    1. @Test
    2. void testUpdate(){
    3. User user = new User();
    4. user.setId(1586705016340967426L);
    5. user.setName("Tom8请问88");
    6. user.setPassword("tom12312888");
    7. userDao.updateById(user);
    8. }

    5、删除

    1. @Test
    2. void testDelete(){
    3. userDao.deleteById(1586705016340967426L);
    4. }

    这里我们分析一下

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

    从这张图可以看出

    • String和Number是Serializable的子类,

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

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

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

    6、分页

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

    分页查询使用的方法是:

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

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

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

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

    1. @Test
    2. void testGetByPage(){
    3. //IPage对象封装了分页操作相关的数据
    4. IPage page = new Page(2,3);
    5. userDao.selectPage(page,null);
    6. System.out.println("当前页码值:"+page.getCurrent());
    7. System.out.println("每页显示数:"+page.getSize());
    8. System.out.println("一共多少页:"+page.getPages());
    9. System.out.println("一共多少条数据:"+page.getTotal());
    10. System.out.println("数据:"+page.getRecords());
    11. }

    分页拦截器

    1. @Configuration
    2. public class MpConfig {
    3. @Bean
    4. public MybatisPlusInterceptor mpInterceptor(){
    5. //1.定义Mp拦截器
    6. MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
    7. //2.添加具体的拦截器
    8. mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    9. return mpInterceptor;
    10. }
    11. }

    效果

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

  • 相关阅读:
    Java调用第三方http接口的常用方式
    Kotlin - 续体 Continuation
    List转Java(基本数据类型)数组简述
    分布式锁的特点和实现
    【Python中图像相似性度量方法全面总结】
    Linux如何设置SUDO_ASKPASS
    List集合
    修改aapt和自定义资源ID
    深入理解Java自定义异常与全局异常处理 @RestControllerAdvice
    单例设计模式c++
  • 原文地址:https://blog.csdn.net/aasd23/article/details/127758263