首页 > 其他分享 >SpringBoot 集成 MybatisPlus 五——ActiveRecord

SpringBoot 集成 MybatisPlus 五——ActiveRecord

时间:2023-04-10 23:32:46浏览次数:39  
标签:mapper MybatisPlus SpringBoot ActiveRecord boot baomidou import org com

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 来操作数据库。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.test.pojo.User;

public interface UserMapper extends BaseMapper<User> {
}

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

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模式。

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

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 接口实例化后进行调用。

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

SpringBoot 集成 MybatisPlus 五——ActiveRecord_User

3 工程

整个工程结构如下

SpringBoot 集成 MybatisPlus 五——ActiveRecord_spring_02

3.1 配置文件

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

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 配置

<?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>

标签:mapper,MybatisPlus,SpringBoot,ActiveRecord,boot,baomidou,import,org,com
From: https://blog.51cto.com/u_113754/6181604

相关文章

  • MyBatisPlus——代码生成器
    代码生成器快速生成各项代码步骤创建Generator类,并创建main方法创建代码生成器AutoGeneratorautoGenerator=newAutoGenerator();连接要生成实体类的数据库DataSourceConfigdataSource=newDataSourceConfig();dataSource.setDriverName(......
  • MyBatisPlus——DML编程控制——乐观锁
    乐观锁业务并发现象带来的问题:秒杀最后一单用于中小型项目(2000请求以下)添加一个数据库字段,使每次请求修改数据时,这个字段就加一,当有多人同时请求时,这些人同时获取到的都是相同的该字段,但当有一人完成了秒杀后字段加一,其他同时获取到的该字段就不匹配了配置步骤数据库表中......
  • 动力节点王鹤SpringBoot3笔记——第六章 远程访问@HttpExchange[SpringBoot 3]
    第六章 远程访问@HttpExchange[SpringBoot3]远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是支付最广泛的。SpringBoot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring......
  • MybatisPlus——DML编程控制——增删改
    DML编程控制id生成策略控制不同的表应用不同的id生成策略日志:自增(1,2,3,4,......)购物订单:特殊规则(FQ23948AK3843)外卖单:关联地区日期等信息(1004202003143491)关系表:可省略id......注解控制@TableId类型:属性注解位置:模型类中用于表示主键的属性定义上方作用:设置......
  • SpringBoot处理get请求的路径参数
    当请求方式为get并且使用路径参数的时候,请求格式形如: 后端controller中可以用实体类接收参数,并且不用添加任何注解,当然这个实体类是中的属性是有getter和setter方法的才行,接受方式形如:实体类形如: SpringBoot会自动做处理,将路径参数中的值填充到实体类对应的属性中......
  • springboot 打包后的端口 jar and war
    WAR包发布项目:端口号是目标发布服务器tomcat的默认端口号(8080)或在tomcat的配置文件(server.xml)中设置的端口号。JAR包发布项目:端口号是application.yml或application.properties里配置的端口号,也就是这些文件配置了内嵌服务器tomcat的端口号。默认端口号也是8080。......
  • MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
    MQTT(EMQX)-LinuxCentOSDocker安装MQTT概述MQTT(MessageQueueTelemetryTransport)是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息协议,在物联网......
  • SpringBoot整合RocketMQ,老鸟们都是这么玩的!
    今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们,第三部分介绍如何封装RocketMQ以便更好地使用。1.SpringBoot整合RocketMQ在SpringBoot中集成RocketMQ......
  • 【springboot中使用拦截器】
    1.拦截器原理1.定义拦截器:2.配置拦截器3.解决静态资源被拦截2.拦截器使用实例2.1判断用户有没有登录2.2取消拦截操作1.拦截器原理拦截器的原理很简单,是AOP的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求。使用场景比较多的是判断用户是否有权限请求后台,更拔高一层的......
  • SpringBoot集成WebSocket
    SpringBoot集成WebSocket参考https://www.cnblogs.com/xuwenjin/p/12664650.html前言:WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC6455,并由RFC7936补充规范。WebSocketAPI也被W3C定为标准。WebSocket使得客户端和服务......