MyBatis-Plus的基本使用(一)

目录

前言

特性

MyBatis-Plus入门案例

常用注解

小结


前言

这篇文章主要来学习MyBatis-Plus这个非常强大的框架.

在学习MyBatis-Plus之前,需要有MyBatis的学习基础.因为MyBatis -Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

这里提到的简化开发,提高效率主要是MyBatis-Plus为我们省去了很多的SQL的操作.也就是说我们在项目中可以将更多的精力放在业务上,而不是SQL语句上,

这也为很多的不喜欢写SQL的人提供了很好的便利.

特性

只做增强不做改变,引入它不会对现有工程产生影响,启动即会自动注入基本 CURD,性能基本无损耗,内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错. 更对特性请移步官网: MyBatis-Plus 🚀 为简化开发而生

MyBatis-Plus入门案例

MyBatis -Plus的使用非常简单,只要你属性springboot,你就能非常轻松的使用它.

在使用之前我们需要创建一个springboot项目. 关于springboot项目创建这里再不过多赘述.
在项目创建好,因为MyBatis -Plus主要是对数据库进行操作,所以我们需要引入数据库驱动,配置数据源等操作.关于这个操作这里也不过多赘述

在一切准备工作就绪之后,我们就需要在我们的项目中引入MyBatis -Plus的依赖了.

XML 复制代码
       <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.5.7</version>
        </dependency>

然后我们需要执行我们的SQL语句.来创建对应的表结构.

sql 复制代码
CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户主键',
  `username` varchar(255) DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) DEFAULT NULL COMMENT '用户密码',
  `email` varchar(255) DEFAULT NULL COMMENT '用户邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

创建实体类.

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {

        private Long userId;  // 用户ID
        private String username;
        private String password;
        private String email;
}

实体类和sql创建好了之后,我们还需要创建mapper接口.

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

可以看到我们的mapper接口中,我们是继承了BaseMapper类,并设置泛型为我们的实体类.

接下来我们就可以对UserMapper接口进行测试,测试mybatis-plus给我们提供的API.

需要注意的是.需要在启动类上添加MapperScan注解,标明mapper包的位置

java 复制代码
@SpringBootApplication
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }

}

接下来我们就可以进行测试

  1. 创建springboot的测试类

  2. 注入UserMapper

  3. 使用MyBatis-Plus提供的API

java 复制代码
@SpringBootTest
class MybatisPlusApplicationTests {


    @Autowired
    private UserMapper userMapper;

    @Test
    public void testUser() {
        // 这个方法表示查询所有
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }
}

点击运行之后,就会出现

这样的错误,这是因为我们的实体类和数据库中表名不一致导致的,mybatis-plus默认会把我们的实体类的名称当做数据库中表名进行操作,如何解决这个问题呢?

1. 在实体类上使用注解

可以在实体类上使用@TableName这个注解 这个注解的作用就是指定表明,在实体类上加,表示映射的表名

同时可以使用@TableId, 这个注解的作用就是指定主键的字段,在userId字段上添加这个注解,并设置value的值为id,说明此字段在数据库中映射为主键,主键字段为id

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
public class User implements Serializable {

        @TableId(value = "id")  // 主键
        private Long userId;  // 用户ID
        private String username;
        private String password;
        private String email;
}

添加这个注解之后,我们在运行测试方法

可以看到能够正确的从数据库表中查询中所有的数据

  1. 在配置文件中统一配置表前缀
XML 复制代码
# mybatis-plus配置
mybatis-plus.mapper-locations=classpath*:mapper/*.xml
mybatis-plus.type-aliases-package=com.example.mybatisplus.model
# 打印sql
mybatis-plus.configuration.log-impl= org.apache.ibatis.logging.stdout.StdOutImpl
# 设置表名前缀 SYS_ 
mybatis-plus.global-config.db-config.table-prefix= SYS_

当我们在配置文件中配置表前缀之后,实体类上@TableName注解就可以去掉了,但是需要注意的是,当在配置文件中配置之后,后续的数据库表名的前缀就都应该与我们配置的前缀相同.

现在再次运行测试方法:

在控制台中同时也打印出来了执行的sql,说明我们的配置是生效了.

我们再进行一次插入操作:

java 复制代码
    @Test
    public void testInsert() {
        User user = new User();
        user.setUsername("ccccccccc");
        user.setEmail("ccccccccc@qq.com");
        int insert = userMapper.insert(user); // 插入一条记录
        System.out.println(insert);
    }

这里可以看到mybatis-plus插入的值,但是大家发现主键id的值是不是不正常

这是因为mybatis-plus默认使用的主键策略是雪花算法。雪花算法 (Snowflake) 是 Twitter 开发的一种分布式 ID 生成算法,用于在分布式系统中生成唯一的 64 位整数 ID。雪花算法生成的 ID 不仅具有全局唯一性,还能够根据时间顺序生成有序的 ID,这对于需要高并发和分布式环境的系统非常有用。但是对于我们目前来说用不到,那么我们就不能再使用雪花算法了,而是使用数据库自己的主键生成策略.

复制代码
@TableId(value = "id",type = IdType.AUTO)  // 主键 ID 自增

在主键的字段上面的TableId注解上,添加type,如上所示. 就能将注解的生成策略设置为数据库的自增主键,然后我们再次运行插入的测试方法:

可以看到在插入的时候,mybatis-plus不会使用雪花算法来计算主键并一起插入了. 现在主键就是使用的我们数据库的自动递增的策略.

可以看到,刚才插入的主键的值比之前的主键刚好递增一次.这里需要说明,现在的主键并没有使用雪花算法,那为什么值还是如此大,原因就是上次在插入时使用的时雪花算法,并且给我们生成了一个id,并且插入,那么这次在插入的时候,我们使用的数据库的自动递增策略,自动递增就是在上一个注解的基础之后+1.

常用注解

目前我们已经介绍了两个注解,分别是@TableName和@TableId

这里对这些注解做个整体说明:

@TableName 指定表明,在实体类上加,表示映射的表名

@TableId 在属性上添加,将这个数据对应的字段设置为主键,@TableId() 的value属性,用于指定主键的字段,@TableId() 的type属性,type表示主键生成的策略,id使用默认的为雪花算法,

@TableField(" ") // 指定这个字段所对应的数据库中的字段名

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
public class User implements Serializable {

        @TableId(value = "id",type = IdType.AUTO)  // 主键 ID 自增
        private Long userId;  // 用户ID
        @TableField("username")
        private String name;
        private String password;
        private String email;
}

@TableLogic 在某个字段上添加这个注解,表示这个字段表示逻辑删除

演示这个注解我们需要重新设置表结构,添加is_delete字段,0表示正常,1表示删除

sql 复制代码
alter table sys_user add COLUMN is_delete int 

在表中添加一个字段,用户表示使用删除.

修改实体类:

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
public class User implements Serializable {

        @TableId(value = "id",type = IdType.AUTO)  // 主键 ID 自增
        private Long userId;  // 用户ID
        @TableField("username")
        private String name;
        private String password;
        private String email;
        @TableLogic  // 逻辑删除 字段  0 未删除  1 已删除
        private int isDelete;
}

需要注意的是,数据库中的字段为is_delete,而在实体类中字段为isDelete,两个字段的名称不一致,但是也没有添加tableField注解,这是因为字段名称的映射有默认规则,它会根据驼峰命名法自动将Java类的属性名映射到数据库中的字段名。因此,即使没有使用 @TableField 注解,MyBatis-Plus 仍然能够将 isDelete 映射到 is_delete

MyBatis-Plus 默认遵循的映射规则是将 Java 类中的驼峰命名属性名转换为下划线分隔的小写字段名。例如,isDelete 会自动映射到 is_delete

我们进行查询测试:

查询测试:

可以看到在查询的时候,后面添加了一个规则,where is_delete=0,这就是我们在进行逻辑删除的字段.

插入测试:

小结

mybatis-plus的基本使用是非常简单的,总体来说分为以及步骤:

  1. 创建springboot项目,引入mybatis-plus依赖

  2. 创建数据库和实体类

  3. 创建mapper接口,并继承BaseMapper类

这篇文章主要介绍mybatis-plus的入门基本使用,下篇文章将进行mybatis-plus的后续部分.包括在项目中的使用以及其他特性.

相关推荐
远歌已逝2 小时前
维护在线重做日志(二)
数据库·oracle
qq_433099403 小时前
Ubuntu20.04从零安装IsaacSim/IsaacLab
数据库
Dlwyz3 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
工业甲酰苯胺5 小时前
Redis性能优化的18招
数据库·redis·性能优化
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
jokerest1236 小时前
web——sqliabs靶场——第十三关——报错注入+布尔盲注
mybatis
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python