前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 集成 MybatisPlus 五——ActiveRecord介绍

SpringBoot 集成 MybatisPlus 五——ActiveRecord介绍

原创
作者头像
用户8100582
发布2023-11-03 20:34:15
4470
发布2023-11-03 20:34:15
举报
文章被收录于专栏:Java多线程Java多线程

1 什么是 Active Record

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。

在 Active Record 模式中,对象中既有持久存储的数据,也有针对数据的操作,Active Record 模式把数据增删改查的逻辑作为对象的一部分,处理对象的用户知道如何读写数据,提升了开发效率。

其实底层仍然使用的是Mapper层在完成数据库操作。只不过由我们自己调用Mapper对象操作数 据库,变成了通过实体类对象来调用Mapper完成数据库操作。从代码的物理视图上我们是看不到实体类调用Mapper的过程的。也就说,本质上仍然是Mapper层在操作数据库实体类型操作数据掩盖了底层的mapper的方法的调用。

2 Active Record 用法

2.1 创建 mapper 接口

在 MyBatisPlus 中,Active Record 模式即在实体类中封装了对数据库的访问,而不需要通过 mapper 类来对数据库进行操作。

但是在实际使用中,我们仍然需要编写 mapper 接口并继承 BaseMapper 父接口,虽然并不会通过 mapper 来操作数据库。

代码语言:java
复制
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.test.pojo.User;

public interface UserMapper extends BaseMapper<User> {
}

同时,需要在 SpringBoot 主类中对 mapper 文件进行扫描:

代码语言:java
复制
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.test.mapper")
public class ArApplication {
    public static void main(String[] args) {
        SpringApplication.run(ArApplication.class, args);
    }
}

如果缺少 mapper 接口,或者未在主类中使用 @MapperScan 进行注册,则在运行时会报如下错误:

com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: com.test.pojo.User Not Found TableInfoCache.

2.2 创建实体类

创建的实体类需要继承 Model 类,才能开启 Active Record 模式。

实体类除了继承 Model 类外,其它设计与非 Active Record 模式相同,包含表名@TableName、字段名@TableField、主键@TableId及主键类型的设置等。

因为引入了 lombok 类,使用注解可以大大简化编写的代码量。

代码语言:java
复制
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value="user")
public class User extends Model<User> {
    @TableId(value = "id", type = IdType.AUTO)
    Integer id;
    String username;
    String gendar;
    String remark;
}

2.3 创建测试类

创建实体类后,直接使用实体类的 insert() 方法,即可向数据库中插入数据,不再需要将 mapper 接口实例化后进行调用。

代码语言:java
复制
import com.test.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class TestAR {

    @Test
    public void testAddUser(){
        User user = new User(20, "成吉思汗", "男", "一代天骄");
        boolean res = user.insert();
        System.out.println(res);
    }
}

输出如下:

==> ?Preparing: INSERT INTO user ( id, username, gendar, remark ) VALUES ( ?, ?, ?, ? )

==> Parameters: 20(Integer), 成吉思汗(String), 男(String), 一代天骄(String)

<== ? ?Updates: 1

3 工程

整个工程结构如下:

3.1 配置文件

配置文件中主要有数据库的配置及 mybatisplus 执行的sql语句打印,内容如下:

application.yml

代码语言:txt
复制
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3366/test?serverTimezone=UTC
    username: root
    password: 123456

# 打印SQL语句
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.2 Maven 配置

代码语言:html
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>testMyBatisPlusAR</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.8</version>
        <relativePath/>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 什么是 Active Record
  • 2 Active Record 用法
    • 2.1 创建 mapper 接口
      • 2.2 创建实体类
        • 2.3 创建测试类
        • 3 工程
          • 3.1 配置文件
            • 3.2 Maven 配置
            相关产品与服务
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com