一、简介
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 操作智能分析阻断,也可自定义拦截规则,预防误操作
框架结构
二、使用
1、准备一个数据库,本例使用的是mysql数据库,建一张员工表(employee),并且插入一条数据,sql如下:
1 CREATE TABLE `employee` ( 2 `id` BIGINT ( 20 ) NOT NULL COMMENT '主键ID', 3 `last_name` VARCHAR ( 30 ) DEFAULT NULL COMMENT '姓名', 4 `age` INT ( 11 ) DEFAULT NULL COMMENT '年龄', 5 `email` VARCHAR ( 50 ) DEFAULT NULL COMMENT '邮箱', 6 PRIMARY KEY ( `id` ) 7 ) ENGINE = INNODB DEFAULT CHARSET = utf8; 8 9 10 INSERT INTO employee ( id, last_name, age, email ) 11 VALUES 12 ( 1, 'Jone', 18, 'test1@baomidou.com' ), 13 ( 2, 'Jack', 20, 'test2@baomidou.com' ), 14 ( 3, 'Tom', 28, 'test3@baomidou.com' ), 15 ( 4, 'Sandy', 21, 'test4@baomidou.com' ), 16 ( 5, 'Billie', 24, 'test5@baomidou.com' );
2、新建一个SpringBoot工程,引入mybatis-plus依赖以及连接mysql数据库依赖
1 <!-- mp依赖 会自动的维护mybatis 以及 mybatis-spring 相关依赖--> 2 <dependency> 3 <groupId>com.baomidou</groupId> 4 <artifactId>mybatis-plus-boot-starter</artifactId> 5 <version>3.5.2</version> 6 </dependency> 7 8 <!-- mysql --> 9 <dependency> 10 <groupId>mysql</groupId> 11 <artifactId>mysql-connector-java</artifactId> 12 </dependency>
3、准备一个yml文件
spring: datasource: username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/test_mybatis_plus?allowPublicKeyRetrieval=true&useSSL=false driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: # 日志输出SQL log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # mapper xml文件默认位置:classpath*:/mapper/**/*.xml # mapper-locations: classpath*:/mapper/**/*.xml
4、启动类
1 @MapperScan("com.test.mybatisplus.mapper") 2 @SpringBootApplication 3 public class Application { 4 5 public static void main(String[] args) { 6 SpringApplication.run(Application.class, args); 7 } 8 9 }
5、实体类
1 @Data 2 public class Employee { 3 4 // @TableId 指定主键策略 5 @TableId(type = IdType.AUTO) 6 private Long id; 7 // @TableField(value = "last_name") 8 private String lastName; 9 10 private String email; 11 12 private Integer age; 13 14 }
6、Mapper
1 /** 2 * Mapper 接口 3 * 基于Mybatis: 在Mapper接口中编写CURD的相关方法 根据Mapper接口所对应的SQL映射文件 以及 方法对应的SQL语句 4 * 基于MP: 让XxxMapper接口继承 BaseMapper接口即可 5 * BaseMapper<T> : 泛型指定的就是当前Mapper接口所操作的实体类型 6 */ 7 public interface EmployeeMapper extends BaseMapper<Employee> { 8 9 }
7、mapperxml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="com.test.mybatisplus.mapper.EmployeeMapper"> 6 7 8 </mapper>
8、测试类
1 @SpringBootTest 2 public class SampleTest { 3 4 @Autowired 5 private EmployeeMapper employeeMapper; 6 7 @Test 8 public void testSelectList() { 9 System.out.println(("----- selectAll method test ------")); 10 List<Employee> userList = employeeMapper.selectList(null); 11 userList.forEach(System.out::println); 12 } 13 }
三、运行测试
运行效果如下:
----- selectAll method test ------ Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7604198a] was not registered for synchronization because synchronization is not active 2024-01-18 23:55:54.585 INFO 44024 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-01-18 23:55:54.835 INFO 44024 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. JDBC Connection [HikariProxyConnection@1380137286 wrapping com.mysql.cj.jdbc.ConnectionImpl@5403431a] will not be managed by Spring ==> Preparing: SELECT id,last_name,email,age FROM employee ==> Parameters: <== Columns: id, last_name, email, age <== Row: 1, Jone, test1@baomidou.com, 18 <== Row: 2, Jack, test2@baomidou.com, 20 <== Row: 3, Tom, test3@baomidou.com, 28 <== Row: 4, Sandy, test4@baomidou.com, 21 <== Row: 5, Billie, test5@baomidou.com, 24 <== Total: 5 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7604198a] Employee(id=1, lastName=Jone, email=test1@baomidou.com, age=18) Employee(id=2, lastName=Jack, email=test2@baomidou.com, age=20) Employee(id=3, lastName=Tom, email=test3@baomidou.com, age=28) Employee(id=4, lastName=Sandy, email=test4@baomidou.com, age=21) Employee(id=5, lastName=Billie, email=test5@baomidou.com, age=24)