1.增删改查入门案例:
首先导入依赖:
java
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
然后这些增删改查的方法就可以删掉了 (注意这里只能是单表查询,多表查询不适用)
Mapper层:

xml文件:

删完之后,在测试方法中找到提示词提示的方法进行填充就好了
比如这个查询方法

运行一下方法:

1.2:常用注解:

MybatisPlus 中比较常用的几个注解如下:
- @TableName:用来指定表名
- @TableId:用来指定表中的主键字段信息
- @TableField:用来指定表中的普通字段信息
IdType 枚举:
- AUTO:数据库自增长
- INPUT:通过 set 方法自行输入
- ASSIGN_ID:分配 ID,按 IdentifierGenerator 的方法 nextId 来生成 id,默认实现类为 DefaultIdentifierGenerator 雪花算法
使用 @TableField 的常见场景:
- 成员变量名与数据库字段名不一致
- 成员变量名以 is 开头,且是布尔值
- 成员变量名与数据库关键字冲突
- 成员变量不是数据库字段
代码示例:
java
@TableName("tb_user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField("username")
private String name;
@TableField("is_married")
private Boolean isMarried;
@TableField("order")
private Integer order;
@TableField(exist = false)
private String address;
}
表结构信息:
名称 | 数据类型 | 注释 | 默认值 |
---|---|---|---|
id | BIGINT | 用户 id | AUTO_INCREMENT |
username | VARCHAR | 用户名 | 无默认值 |
is_married | BIT | 密码 | 0 |
order | TINYINT | 序号 | NULL |
2.条件构造器

QueryWrapper和UpdateWrapper的用法
这是原来的mybatis查询语句:

这是mybatis-plus的查询语句:

查询结果:
查询结果:

问题:可是刚才的更新操作是把更新的值给写死了,碰到下面的问题那我们就要用一种新的方法


问题:上面的那些其实都是把字段写死的硬编码,我们就用到了lambdaQueryWeapper


3.自定义Sql


4.Service接口
service接口的继承关系

用Sevice就可以做到对数据库的操作,非常的厉害,他的底层就是去调了userMapper的接口
5.代码生成
在使用MybatisPlus以后,基础的Mapper
、Service
、PO
代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO
、Mapper
、Service
等相关代码。只不过代码生成器同样要编码使用,也很麻烦。
这里推荐大家使用一款MybatisPlus
的插件,它可以基于图形化界面完成MybatisPlus
的代码生成,非常简单。
3.1.1.安装插件
在Idea
的plugins市场中搜索并安装MyBatisPlus
插件:
3.1.2.使用
刚好数据库中还有一张address表尚未生成对应的实体和mapper等基础代码。我们利用插件生成一下。 首先需要配置数据库地址,在Idea顶部菜单中,找到other
,选择Config Database
:

3.3. 逻辑删除
对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:
-
在表中添加一个字段标记数据是否被删除
-
当删除数据时把标记置为true
-
查询时过滤掉标记为true的数据
一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。
为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。
注意,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。
例如,我们给address
表添加一个逻辑删除字段:
sql
alter table address add deleted bit default b'0' null comment '逻辑删除';
然后给Address
实体添加deleted
字段:

接下来,我们要在application.yml
中配置逻辑删除字段:
XML
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
测试: 首先,我们执行一个删除操作:
java
@Test
void testDeleteByLogic() {
// 删除方法与以前没有区别
addressService.removeById(59L);
}
方法与普通删除一模一样,但是底层的SQL逻辑变了:

综上, 开启了逻辑删除功能以后,我们就可以像普通删除一样做CRUD,基本不用考虑代码逻辑问题。还是非常方便的。
注意: 逻辑删除本身也有自己的问题,比如:
-
会导致数据库表垃圾数据越来越多,从而影响查询效率
-
SQL中全都需要对逻辑删除字段做判断,影响查询效率
因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。