什么是 MyBatis-Plus
Mybatis-Plus:为简化开发而生
MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改变。使得我们可以可以在 Mybatis 开发的项目上直接进行升级为 Mybatis-plus,正如它对自己的定位,它能够帮助我们进一步简化开发过程,提高开发效率。
Mybatis-Plus 其实可以看作是对 Mybatis 的再一次封装,升级之后,对于单表的 CRUD 操作,调用 Mybatis-Plus 所提供的 API 就能够轻松实现,此外还提供了各种查询方式、分页等行为。最最重要的,开发人员还不用去编写 XML,这就大大降低了开发难度
其官方主页为:https://mp.baomidou.com。
Mybatis-Plus 的特点
-
无侵入,损耗小**
-
强大的 CURD 操作
-
支持 Lambda 形式调用
-
支持主键自动生成
-
支持自定义全局通用模式
-
支持 ActiveRecord 模式
-
内置代码生成器、分页插件、性能分析器和全局拦截插件
-
……
Mybatis-Plus 结构
数据库准备
我们依旧沿用官方文档中提供的实例来进行,那么我们首先来创建一个数据库并进入:
drop database if exists mydb;
create database mydb;
use mydb;
然后创建一个员工表,主要有 id
、name
、sex
、email
四大属性。
create table employee(
id int primary key not null,
name varchar(100) null,
sex varchar(10) null,
email varchar(255) null
)
然后插入部分数据:
DELETE FROM employee;
INSERT INTO employee (id, name, sex, email) VALUES
(1, ‘张三’, ‘男’, ‘zhangsan@cunyu1943.com’),
(2, ‘李四’, ‘女’, ‘lisi@cunyu1943.com’),
(3, ‘王五’, ‘男’, ‘wangwu@cunyu1943.com’);
SpringBoot 项目
这里我利用的是 IDEA 创建的一个 SpringBoot 项目,创建后,主要需要注意的有以下几点。
- 添加依赖
除开创建 SpringBoot 项目所需的必要依赖之外,我们还需要引入 MP 和 MySQL 的依赖。
com.baomidou
mybatis-plus-boot-starter
mysql
mysql-connector-java
runtime
- 数据库配置
依赖添加完成之后,到配置文件 application.yml
中去添加数据库的相关配置(注意:官方创建的配置文件是 application.properties
,我们需要手动把它的后缀名改成 .yml
)。
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
password: 12345
username: root
application:
name: employee
- 项目整体结构
项目创建完成后,我们最终的项目目录结构如下图所示:
编码
完成数据库准备工作和建立 SpringBoot 项目之后,接下来的工作就是编码了。
- 实体类编写
实体类也就对应我们刚才所建立的数据表 employee
。因为这里使用了 Lombok 插件,所以可以看到在类上多了一个 @Data
的注解,但是少了 getter、setter
方法,实现了代码的简洁化,大家如果还不知道这个插件,可以去了解下,后续我可能也会写一篇关于这个插件的文章,可以关注一下。
package com.cunyu.employee.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
-
Created with IntelliJ IDEA.
-
@author : cunyu
-
@version : 1.0
-
@project : Employee
-
@package : com.cunyu.employee.entity
-
@className : Employee
-
@createTime : 2021/8/7 17:33
-
@description : 员工实体类
*/
@Data
@TableName(“employee”)
public class Employee {
/**
- 员工 id
*/
@TableId(“id”)
private Long id;
/**
- 员工姓名
*/
private String name;
/**
- 员工性别
*/
private String sex;
/**
- 员工邮件
*/
private String email;
}
- Mapper 接口编写
这里 EmployeeMapper
继承自 MP 中 BaseMapper
,它里边已经提供了许多方法,可以供我们使用。
package com.cunyu.employee.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cunyu.employee.entity.Employee;
/**
-
Created with IntelliJ IDEA.
-
@author : cunyu
-
@version : 1.0
-
@project : Employee
-
@package : com.cunyu.employee.mapper
-
@className : EmployeeMapper
-
@createTime : 2021/8/7 17:45
-
@description : 员工 Mapper 类
*/
public interface EmployeeMapper extends BaseMapper {
}
以下是 BaseMapper
中所提供的一些方法,通过继承该接口,我们就可以不用编写 mapper.xml
也可以获得 CRUD 功能了。
package com.baomidou.mybatisplus.core.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
-
Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
-
这个 Mapper 支持 id 泛型
-
@author hubin
-
@since 2016-01-23
*/
public interface BaseMapper extends Mapper {
/**
-
插入一条记录
-
@param entity 实体对象
*/
int insert(T entity);
/**
-
根据 ID 删除
-
@param id 主键ID
*/
int deleteById(Serializable id);
/**
-
根据 columnMap 条件,删除记录
-
@param columnMap 表字段 map 对象
*/
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/**
-
根据 entity 条件,删除记录
-
@param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
*/
int delete(@Param(Constants.WRAPPER) Wrapper queryWrapper);
/**
-
删除(根据ID 批量删除)
-
@param idList 主键ID列表(不能为 null 以及 empty)
*/
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/**
-
根据 ID 修改
-
@param entity 实体对象
*/
int updateById(@Param(Constants.ENTITY) T entity);
总结
总的来说,面试是有套路的,一面基础,二面架构,三面个人。
最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友
s.WRAPPER) Wrapper queryWrapper);
/**
-
删除(根据ID 批量删除)
-
@param idList 主键ID列表(不能为 null 以及 empty)
*/
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/**
-
根据 ID 修改
-
@param entity 实体对象
*/
int updateById(@Param(Constants.ENTITY) T entity);
总结
总的来说,面试是有套路的,一面基础,二面架构,三面个人。
最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友
[外链图片转存中…(img-pns2kFjZ-1714515616041)]
[外链图片转存中…(img-jvxbkgwf-1714515616041)]