1. MybatisPlus的介绍

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

愿景我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

mybatisplus入门_数据库

2. MybatisPlus的特性讲解  11

2.1特性  11

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

• 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

2.2 支持数据库   11

任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb

达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库

2.3 MybatisPlus的架构模型   12

mybatisplus入门_数据库_02

2.4 小结

本章节主要介绍了传统的Mybatis框架的开发效率问题,通过发现问题,我们期望得到一款增强工具,在不改变Mybatis核心原理的同时,解决Mybatis开发效率问题,并提供其他数据库所需要的功能。

通过了解MybatisPlus,我们得知,它是一款国产的增强工具,极大的简化了Mybatis框架操作,降低了Mybatis框架的学习成本,提高了开发效率,在国内十分流行。

3. 入门案例    13

3.1  准备相关开发环境

IDEA 2021.3.1

PostMan 10.6.7

Navicat 15.0.9

Mysql 5.7.27

JDK8 1.8.0_311   

以上环境各位同学之前一定接触过,没有安装的自行安装,在这里就不再演示安装了

另外需要有Mybatis和springboot相关的基础,如果没有这部分基础的,需要先回顾相关课程

3.2 搭建springboot工程   13

mybatisplus入门_数据库_03

mybatisplus入门_数据库_04

mybatisplus入门_User_05

3.3 创建表结构   13

我们之前已经创建了,此处不在演示

3.4 案例演示

3.4.1 引入依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.13</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.powernode</groupId>
	<artifactId>course2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>course2</name>
	<description>course2</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.30</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.2.8</version>
		</dependency>

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.3</version>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

application.yml

spring:
  datasource:
    username: root
    password: lzl
    url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver

3.4.2 实体类   14

User

package com.powernode.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//数据库对应的实体类user   4
@Data  //生成set get方法
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

3.4.2 持久层接口   14

package com.powernode.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.powernode.domain.User;
import org.apache.ibatis.annotations.Mapper;

//持久层接口   14
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

3.4.3 业务层接口   15

package com.powernode.service;

import com.powernode.domain.User;

import java.util.List;

//业务层接口   15
public interface UserService {
    //查询所有
    List<User> selectList();
}

3.4.4 业务层接口实现类   15

package com.powernode.service.impl;

import com.powernode.domain.User;
import com.powernode.mapper.UserMapper;
import com.powernode.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

//业务层接口实现类   15
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> selectList() {
        return userMapper.selectList(null);
    }
}

3.4.5 控制层   15

package com.powernode.controller;

import com.powernode.domain.User;
import com.powernode.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

//控制层  15
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/selectList")
    public List<User> selectList(){
        return userService.selectList();
    }
}

测试  16

浏览器输入http://localhost:8080/selectList

mybatisplus入门_User_06

3.4.6 使用单元测试  16

到此,模拟开发的三层我们就测试完了, 因为Controller和Service都是之前的知识,所以后面我们测试MybatisPlus的代码,通过单元测试的方式来编写

package com.powernode;

import com.powernode.domain.User;
import com.powernode.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class Course2ApplicationTests {

	@Autowired
	private UserMapper userMapper;

	@Test
	void selectList(){
		List<User> users = userMapper.selectList(null);
		System.out.println(users);
	}

}

mybatisplus入门_User_07

4. 精简springboot的相关日志   17

4.1 去除srping和mybatisplus的logo

application.yml

mybatisplus入门_spring_08

spring:
  datasource:
    username: root
    password: lzl
    url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver
  main:
    banner-mode: off #去除spring的图标  17
mybatis-plus:
  global-config:
    banner: false #去除mybatisplus的图标  17

4.2 MybatisPlus的执行日志  17

configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出sql日志  17

mybatisplus入门_数据库_09

5. 小结   17

本章节我们通过编写了一个MybatisPlus的入门案例,体验到了MybatisPlus的便捷性,在后面的学习中,各种各样的MybatisPlus的操作都非常容易上手,可以说MybatisPlus是一款学习成本非常低的增强工具。