Mybatis-Plus介绍
阅读原文时间:2022年07月01日阅读:1

Mybatis-Plus介绍

Mybatis-Plus概念
Mybatis-Plus介绍

官网https://mybatis-plus/https://mp.baomidou.com/

mybatis-plus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发,提高效率而生;

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

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


Mybatis-Plus快速入门

JDK:1.8

Maven

Mybatis-Plus:3.0

WARNING:引入Mybatis-plus之后,请不要再此引入Mybatis以及Mybatis-Spring,以避免因版本差异导致的问题!

数据库脚本

DROP TABLE IF EXISTS user;
​
CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

数据库 Data 脚本:

DELETE FROM user;
​
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

maven依赖

<dependencies>
 &nbsp; &nbsp;<!--mybatis-plus插件依赖-->
 &nbsp; <dependency>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<groupId>com.baomidou</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>mybatis-plus-boot-starter</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<version>3.4.0</version>
 &nbsp; &nbsp; &nbsp; &nbsp;</dependency>
​
 &nbsp; &nbsp;<!--mysql-->
 &nbsp; &nbsp;<dependency>
 &nbsp; &nbsp; &nbsp; &nbsp;<groupId>mysql</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>mysql-connector-java</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;<version>5.1.47</version>
 &nbsp; &nbsp;</dependency>
​
 &nbsp; &nbsp;<!--数据库连接池-->
 &nbsp; &nbsp;<dependency>
 &nbsp; &nbsp; &nbsp; &nbsp;<groupId>com.alibaba</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>druid</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;<version>1.1.20</version>
 &nbsp; &nbsp;</dependency>
​
 &nbsp; &nbsp;<dependency>
 &nbsp; &nbsp; &nbsp; &nbsp;<groupId>org.projectlombok</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>lombok</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;<version>1.18.22</version>
 &nbsp; &nbsp;</dependency>
​
 &nbsp; &nbsp;<dependency>
 &nbsp; &nbsp; &nbsp; &nbsp;<groupId>junit</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>junit</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;<version>4.13.2</version>
 &nbsp; &nbsp;</dependency>
​
 &nbsp; &nbsp;<dependency>
 &nbsp; &nbsp; &nbsp; &nbsp;<groupId>org.slf4j</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>slf4j-log4j12</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;<version>1.7.30</version>
 &nbsp; &nbsp;</dependency>
</dependencies>
​
<build>
 &nbsp; &nbsp;<plugins>
 &nbsp; &nbsp; &nbsp; &nbsp;<plugin>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<groupId>org.apache.maven.plugins</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>maven-site-plugin</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;</plugin>
 &nbsp; &nbsp;</plugins>
</build>

创建Model子模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 &nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 &nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 &nbsp; &nbsp;<parent>
 &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>Wsy-Mybatis-Plus</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp;<groupId>com.yun</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp;<version>1.0-SNAPSHOT</version>
 &nbsp; &nbsp;</parent>
 &nbsp; &nbsp;<modelVersion>4.0.0</modelVersion>
​
 &nbsp; &nbsp;<artifactId>Wsy-Mybatis-Plus-simple</artifactId>
​
 &nbsp; &nbsp;<properties>
 &nbsp; &nbsp; &nbsp; &nbsp;<maven.compiler.source>15</maven.compiler.source>
 &nbsp; &nbsp; &nbsp; &nbsp;<maven.compiler.target>15</maven.compiler.target>
 &nbsp; &nbsp;</properties>
​
</project>

log4j.properties

log4j.rootLogger=DEBUG,A1
​
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPatten=[%t] [%c]-[%p] %m%n
原生Mybatis实现查询User

1,编写文件

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 &nbsp; &nbsp; &nbsp; &nbsp;"http://mybatis.org/dtd/mybatis-3-config.dtd">
​
<configuration>
​
 &nbsp; &nbsp;<properties resource="jdbc.properties"></properties>
​
 &nbsp; &nbsp;<!--environments:运行环境-->
 &nbsp; &nbsp;<environments default="development">
 &nbsp; &nbsp; &nbsp; &nbsp;<environment id="development">
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<!--当前事务交由JDBC进行管理-->
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<transactionManager type="JDBC"></transactionManager>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<!--当前使用mybatis提供的连接池-->
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<dataSource type="POOLED">
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<property name="driver" value="${jdbc.driver}"/>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<property name="url" value="${jdbc.url}"/>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<property name="username" value="${jdbc.username}"/>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<property name="password" value="${jdbc.password}"/>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</dataSource>
 &nbsp; &nbsp; &nbsp; &nbsp;</environment>
 &nbsp; &nbsp;</environments>
​
 &nbsp; &nbsp;<!--引入映射配置文件-->
 &nbsp; &nbsp;<mappers>
 &nbsp; &nbsp; &nbsp;<mapper resource="mapper/UserMapper.xml"></mapper>
 &nbsp; &nbsp;</mappers>
​
</configuration>

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/zdy_mybatis
jdbc.username=root
jdbc.password=123456

2,User实体

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
​
 &nbsp; &nbsp;/** id */
 &nbsp; &nbsp;private Long id;
​
 &nbsp; &nbsp;/** name */
 &nbsp; &nbsp;private String name;
​
 &nbsp; &nbsp;/** age */
 &nbsp; &nbsp;private Integer age;
​
 &nbsp; &nbsp;/** email */
 &nbsp; &nbsp;private String email;
}

3,编写UserMapper接口

public interface UserMapper {
​
 &nbsp; &nbsp;/**
 &nbsp; &nbsp; * 查询所有用户
 &nbsp; &nbsp; * @return
 &nbsp; &nbsp; */
 &nbsp; &nbsp;List<User> getAll();
}

4,编写UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 &nbsp; &nbsp; &nbsp; &nbsp;PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 &nbsp; &nbsp; &nbsp; &nbsp;"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
​
<mapper namespace="com.yun.mapper.UserMapper">
​
 &nbsp; &nbsp;<!--select-->
 &nbsp; &nbsp;<select id="getAll" resultType="com.yun.pojo.User">
 &nbsp; &nbsp; &nbsp;  select * from user
 &nbsp; &nbsp;</select>
​
</mapper>

5,测试

public static void main(String[] args) throws IOException {
​
 &nbsp; &nbsp; &nbsp; &nbsp;InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
​
 &nbsp; &nbsp; &nbsp; &nbsp;SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
​
 &nbsp; &nbsp; &nbsp; &nbsp;SqlSession sqlSession = sqlSessionFactory.openSession();
​
 &nbsp; &nbsp; &nbsp; &nbsp;UserMapper mapper = sqlSession.getMapper(UserMapper.class);
​
 &nbsp; &nbsp; &nbsp; &nbsp;List<User> userList = mapper.getAll();
​
 &nbsp; &nbsp; &nbsp; &nbsp;userList.forEach(item -> {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(item);
 &nbsp; &nbsp; &nbsp;  });
​
 &nbsp;  }

运行结果报错!!!

Cause: java.io.IOException: Could not find resource mapper/UserMapper.xml

提示找不到xml配置文件,我们在sqlMapConfig.xml中修改一下引入映射配置文件

 &nbsp;<mappers>
 &nbsp; &nbsp; &nbsp;<package name="com.yun.mapper"/>
 &nbsp; &nbsp;</mappers>

然后在运行一下,运行结果如下

Created connection 895599632.
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@3561c410]
==>  Preparing: select * from user
==> Parameters:
<== &nbsp; &nbsp; &nbsp;Total: 5
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

Mybatis+MP实现查询User

1,承接上面的代码,将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有方法;

public interface UserMapper extends BaseMapper<User> {
​
}

2,使用MP中的MybatisSqlSessionFactoryBuilder进程构建;

 public static void main(String[] args) throws IOException {
​
 &nbsp; &nbsp; &nbsp; &nbsp;InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
​
 &nbsp; &nbsp; &nbsp; &nbsp;SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(resourceAsStream);
​
 &nbsp; &nbsp; &nbsp; &nbsp;SqlSession sqlSession = sqlSessionFactory.openSession();
​
 &nbsp; &nbsp; &nbsp; &nbsp;UserMapper mapper = sqlSession.getMapper(UserMapper.class);
​
 &nbsp; &nbsp; &nbsp; &nbsp;List<User> userList = mapper.getAll();
​
 &nbsp; &nbsp; &nbsp; &nbsp;userList.forEach(item -> {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(item);
 &nbsp; &nbsp; &nbsp;  });
​
 &nbsp;  }

运行结果报错,提示java.lang.ClassNotFoundException: org.springframework.core.GenericTypeResolver经排查发现是jar包冲突了,然后检查pom依赖,发现mybatis-plusjar包引入依赖有误 这边修改一下为

<dependency>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<groupId>com.baomidou</groupId>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>mybatis-plus-boot-starter</artifactId>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<version>3.4.0</version>
 &nbsp; &nbsp; &nbsp; &nbsp;</dependency>

重新运行代码.运行结果如下:

17:17:32.986 [main] DEBUG com.yun.mapper.UserMapper.getAll - ==>  Preparing: select * from user
17:17:33.040 [main] DEBUG com.yun.mapper.UserMapper.getAll - ==> Parameters:
17:17:33.134 [main] DEBUG com.yun.mapper.UserMapper.getAll - <== &nbsp; &nbsp; &nbsp;Total: 5
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

现在我们换成Mybatsi-Plus内嵌的方法:

public static void main(String[] args) throws IOException {
​
 &nbsp; &nbsp; &nbsp; &nbsp;InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
​
 &nbsp; &nbsp; &nbsp; &nbsp;SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(resourceAsStream);
​
 &nbsp; &nbsp; &nbsp; &nbsp;SqlSession sqlSession = sqlSessionFactory.openSession();
​
 &nbsp; &nbsp; &nbsp; &nbsp;UserMapper mapper = sqlSession.getMapper(UserMapper.class);
​
 &nbsp; &nbsp; &nbsp; &nbsp;List<User> userList = mapper.selectList(null);
​
 &nbsp; &nbsp; &nbsp; &nbsp;userList.forEach(item -> {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(item);
 &nbsp; &nbsp; &nbsp;  });

运行结果

User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

发现是正常,展示Mybatis-Plus强大的特性!