我的个人博客Alexios,欢迎大家来吐槽交流。
一、MP简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
1.1、特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
1.2、支持的数据库
任何能使用 mybatis 进行 crud, 并且支持标准 sql 的数据库
二、快速入门
使用一个springboot项目来体验MP的强大之处。
2.1、建立入门项目的数据库与项目
建表
create database mp;
use mp;
create table user(
id bigint(20) primary key auto_increment,
name varchar(50),
email varchar(50),
age int
);
insert into
user(name, email, age)
VALUES
('A','a@qq.com',18),
('B','b@qq.com',19),
('C','c@qq.com',12),
('D','d@qq.com',11),
('E','e@qq.com',111);
建立spring-boot项目,引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
项目的application.yml配置文件如下
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai
password: tianxin1230.
username: root
编写主启动类
@MapperScan("com.hzx.mpblog.mapper")
@SpringBootApplication
public class MpApplication {
public static void main(String[] args) {
SpringApplication.run(MpApplication.class);
}
}
根据数据库表建立对应entity实体类,这里使用Lombok插件并开启链式编程来简化开发
@Data
@Accessors(chain = true)
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
编写UserMapper接口,该接口需要继承BaseMapper< T >,其中T为要操作的数据库表对应的实体类
@Repository
public interface UserMapper extends BaseMapper<User> {
}
2.2、编写测试类进行测试
编写测试类,测试mybatis-plus为我们提供的查询所有方法
- 在selectList中,可以传入一个QueryWrapper查询条件构造器对象,但由于这里需要查询所有对象,所以不加条件筛选,传入null
@SpringBootTest
@RunWith(SpringRunner.class)
public class MpApplicationTest {
@Autowired
private UserMapper userMapper;
@Test
public void testFindAll() {
List<User> userList = userMapper.selectList(null);
userList.forEach(user ->
System.out.println(user)
);
}
}
结果
2.3、添加配置输出sql语句
我们可以在application.yml中添加配置,让mybatis-plus在执行时输出的sql语句
# 打印sql语句
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
重新启动,测试结果
三、CRUD扩展
3.1、insert测试插入数据
使用Mybatis-plus自带的插入方法进行测试
@Test
public void testInsert() {
User user = new User();
user.setName("小明")
.setAge(18)
.setEmail("xiaoming@qq.com");
int result = userMapper.insert(user