目录
注意点:我们需要在启动类上去扫描我们的mapper包下的所有的接口@MapperScan("com.system.bootMyplus.mapper")
为什么要学习MyBatisPlus?
因为MyBatisPlus可以节省我们大量工作时间,所以的CRUD代码(业务的描述)它都可以自动化完成。
市面上流行JPA(继承SpringBoot,此法比较多)、tk-mapper(用的比较多)、MyBatisPlus(主要是学会偷懒)
要想学会MyBatis-Plus,得先学会SSM和SpringBoot!!!!!
简介
MyBatis本来就是简化JDBC操作的,而MyBaitsPlus则简化MyBatis。
特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作。
- 强大的 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 操作智能分析阻断,也可自定义拦截规则,预防误操作。
- 支持数据库:任何能使用
mybatis
进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。 -
mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb
-
达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库
框架结构
快速入门
使用第三方组件:
1、导入对应的依赖。
2、研究依赖如何配置。
3、代码如何编写。
4、提高扩展技术能力。
步骤
1、创建数据库mybatis_plus。
2、创建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)
);
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');
--真实开发中,version(乐观锁)、deleted(逻辑删除)、gmt_create(表的创建时间)、gmt_modified(修改时间)
3、编写项目,使用SpringBoot初始化。
若使用SpringBoot模板创建项目,过程如下:
4、导入依赖。(若使用maven创建的话,则导入依赖)
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringBoot_MyBatilPlus</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
</parent>
<!-- web场景依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
<!-- 打成jar包依赖 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
说明:
我们使用MyBatisPlus可以节省我们大量的代码,尽量不要同时导入MyBatis和Mybaits-plus版本的差异。
5、连接数据库,和MyBatis相同。创建application.yml
#SpringBoot整合Mybatis-Plus相关配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#设置文件大小
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
#mybatis-plus配置及其日志输出
mybatis-plus:
configuration:
# 日志
# log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
mapper-locations: ["classpath*/mapper/*.xml"]
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: flag
#驼峰下划线转换
column-underline: true
传统方式6、pojo【bean】-dao【mapper,连接mybatis,配置mapper.xml文件】-service-controller
6、使用MyBatis-Plus之后:
-
pojo【bean】
package com.system.bootMyplus.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
- mapper【接口】
package com.system.bootMyplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.system.bootMyplus.bean.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
//在对应的Mapper上面实现基本的接口 BaseMapper
@Mapper
@Repository
//@Repository 若不加@Mapper则加此注解,代表dao层(也就是mapper层)持久层注解
public interface UserMapper extends BaseMapper<User> {
/**
* 所以的CRUD操作已经编写完成
* 无需像以前一样配置一大堆xml文件
*/
}
- 启动类
package com.system.bootMyplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//扫描并识别到mapper文件夹即可
@MapperScan("com.system.bootMyplus.mapper")
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(com.system.bootMyplus.WebApplication.class,args);
}
}
- Spring测试
package com.system.bootMyplus;
import com.system.bootMyplus.bean.User;
import com.system.bootMyplus.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
public class MybatisPlusApplicationTests {
/**
* 继承了BasesMapper,所有的方法都源于自己的父类,我们也可以编写自己的扩展方法
*/
@Autowired
private UserMapper userMapper;
@Test
void contextLoads(){
//查询全部用户
/**
* 其参数就是一个wrapper,条件构造器材,若不用,则写为null
*/
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
}
- application.yml配置文件
#SpringBoot整合Mybatis-Plus相关配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#设置文件大小
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
#mybatis-plus配置及其日志输出
mybatis-plus:
configuration:
# 日志
# log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
# mapper-locations: ["classpath*/mapper/*.xml"]
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: flag
#驼峰下划线转换
column-underline: true
注意点:我们需要在启动类上去扫描我们的mapper包下的所有的接口@MapperScan("com.system.bootMyplus.mapper")
思考问题?
1、SQL谁帮我们写?
2、方法哪里来的?
答:1、2、答案相同。为之,MyBatisPlus都写好了,我们直接使用即可。若里面接口没有所要使用的话,可以编写自己的扩展方法。