MybatisPlus

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以后,基础的MapperServicePO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成POMapperService等相关代码。只不过代码生成器同样要编码使用,也很麻烦。

这里推荐大家使用一款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中全都需要对逻辑删除字段做判断,影响查询效率

因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。

相关推荐
夏天的味道٥1 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
Fantasywt2 小时前
THREEJS 片元着色器实现更自然的呼吸灯效果
前端·javascript·着色器
IT、木易3 小时前
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
开发语言·前端·javascript·ecmascript
冰糖码奇朵3 小时前
大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
java·数据库·sql·mysql
好教员好3 小时前
【Spring】整合【SpringMVC】
java·spring
浪九天4 小时前
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
java·后端·spring
jiarg4 小时前
linux 内网下载 yum 依赖问题
linux·运维·服务器
yi个名字4 小时前
Linux第一课
linux·运维·服务器
堕落年代5 小时前
Maven匹配机制和仓库库设置
java·maven
功德+n5 小时前
Maven 使用指南:基础 + 进阶 + 高级用法
java·开发语言·maven