一文带你了解MybatisPlus基本使用

1,109 阅读3分钟

MybatisPlus基本使用

前序

一文带你了解MybatisPlus基本使用
Spring、SpringBoot整合Mybatis-Plus详细教程
MybatisPlus通⽤ CRUD接口
MybatisPlus之条件构造器
MybatisPlus中代码生成器教程详解
MybatisPlus之配置

1. Mybatis-Plus概念

1.1 Mybatis-Plus介绍

  • 官⽹: mybatis.plus/mp.baomidou.com/

  • Mybatis-Plus介绍 MyBatis-Plus(简称 MP)是⼀个 MyBatis 的增强⼯具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提⾼效率⽽⽣。

  • 愿景

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

1.2 特性

image.png

1.3 架构

image.png

  • mybatis-plus-boot-starter 表示需要引入的依赖jar包

  • annotation 注解模块

  • extension 扩展模块

  • core 核心模块

  • generator 代码生成器模块

  • scan Entity

项目启动后会扫描数据库实体类

  • Analysis Table Name Column

扫描完成后通过反射进行实体类进行分析,包含Table和Colum等相关信息,知道相关信息之后,会根据表名和列名生成对应的增删改查方法

  • Injection Mybatis Container

将增删改查方法注入到Mybatis容器中进行操作

1.4 支持数据库

image.png

由此,Mybatis可以支持的数据库,Mybatis-Plus基本上都支持

1.5 作者

Mybatis-Plus是由baomidou(苞⽶⾖)组织开发并且开源的,⽬前该组织⼤概有31⼈左右。码云地址:gitee.com/organizatio…

image.png

2. Mybatis-Plus快速⼊⻔

2.1 安装

全新的如下:Mybatis-Plus3.0基于 JDK8,提供了lambda形式的调⽤,所以安装集成MP3.0要求如下

  • JDK 8+
  • Maven or Gradle

Spring MVC

Maven:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.4.0</version>
</dependency>

SpringBoot

Maven:

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

waring
引入Mybatis-Plus之后请不要在引入Mybatis和Mybatis-Spring,以此来避免版本差异发生的问题

对于Mybatis整合MP有常常有三种⽤法,分别是Mybatis+MP、Spring+Mybatis+MP、Spring Boot+Mybatis+MP。

2.2 创建数据库以及表

  • 创建mp数据库

image.png

  • 创建User表,其表结构如下:

image.png

image.png

2.3 创建⼯程

image.png

导⼊依赖:

<dependencies>
  <!-- mybatis-plus 插件依赖  -->
  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.1.1</version>
  </dependency>
  <!--Mysql-->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
  </dependency>
  <!--连接池    -->
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.11</version>
  </dependency>
  <!-- 简化    bean    代码的⼯具包    -->
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
  </dependency>
</dependencies>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

2.4 Mybatis + MP

下⾯演示,通过纯Mybatis与Mybatis-Plus整合。

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.ConversionPattern=[%t] [%c]-[%p] %m%n

Mybatis实现查询User

  • 第⼀步,编写mybatis-config.xml⽂件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <properties
    resource="jdbc.properties"></properties>
  <!--environments:运⾏环境-->
  <environments
    default="development">
    <environment id="development">
      <!--当前的事务事务管理器是JDBC-->
      <transactionManager
        type="JDBC"></transactionManager>
      <!-- 数据源信息 POOLED : 使⽤ mybatis 的连接池 -->
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
  <!--引⼊映射配置⽂件  -->
  <mappers>
    <mapper
      resource="mapper/UserMapper.xml"></mapper>
  </mappers>
</configuration>
  • 第⼆步,编写User实体对象:(这⾥使⽤lombok进⾏了进化bean操作)
@Data
//生成无参构造
@NoArgsConstructor
//生成有参构造
@AllArgsConstructor
public class User {
  private Long id;
  private String name;
  private Integer age;
  private String email;
}
  • 第三步,编写UserMapper接⼝:
public interface UserMapper {
  List<User> findAll();
}
  • 第四步,编写UserMapper.xml⽂件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lagou.mapper.UserMapper">
  <!--查询所有-->
  <select id="findAll" resultType="com.mybatis.mp.User">
    select *
    from user
  </select>
</mapper>
  • 第五步,编写TestMybatis测试⽤例:
public class MybatisTest {

  @Test
  public void test1() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> all = mapper.findAll();
    for (User user : all) {
      System.out.println(user);
    }
  }
}
  • 测试结果:

image.png

注:如果实体类名称和表名称不⼀致,可以在实体类上添加注解@TableName("指定数据库表名")

Mybatis+MP实现查询User

  • 第⼀步,将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有⽅法:
public interface UserMapper extends BaseMapper<User > {
  List<User> findAll();
}
  • 第⼆步,使⽤MP中的MybatisSqlSessionFactoryBuilder进程构建:
  @Test
  public void test2() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//这⾥使⽤的是MP 中的MybatisSqlSessionFactoryBuilder 
    SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//可以调⽤BaseMapper中定义的⽅法
    List<User> all = mapper.selectList(null);
    for (User user : all) {
      System.out.println(user);
    }
  }
  • 测试:

image.png

注:如果实体类名称和表名称不⼀致,可以在实体类上添加注解@TableName("指定数据库表名") 简单说明:

由于使⽤了 MybatisSqlSessionFactoryBuilder进⾏了构建,继承的BaseMapper中的⽅法就载⼊到了SqlSession中,所以就可以直接使⽤相关的⽅法; 如图

image.png