MyBatus-Plus之ActiveRecord(AR)

ActiveRecord

什么是ActiveRecord

  • 每一个数据库表对应创建一个类,类的每一个对象实例对应着表的一行记录;通常表的每个字段在类中都有相应的 Field
  • ActiveRecord 负责把自己持久化,在 ActiveRecord 中封装了对数据库的访问,通过对象自己实现 CRUD,实现优雅的数据库操作。
  • ActiveRecord 也封装了部分业务逻辑,可以作为业务对象使用。

ActiveRecord的CRUD

前期准备

  • 创建一个数据库 mybatisplus

  • 创建 Dept

    CREATE TABLE `dept` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) DEFAULT NULL,
      `mobile` varchar(50) DEFAULT NULL,
      `manager` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
    
  • 创建 springboot 工程

    • 导入对应 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.5.3</version>
              <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.cmy</groupId>
          <artifactId>mybatis_plus</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>mybatis_plus</name>
          <description>Demo project for Spring Boot</description>
          <properties>
              <java.version>1.8</java.version>
          </properties>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter</artifactId>
              </dependency>
      
              <!-- mybatis-plus -->
              <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-boot-starter</artifactId>
                  <version>3.4.0</version>
              </dependency>
      
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <scope>runtime</scope>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
              </dependency>
          </dependencies>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      
      
    • mysql数据库相关配置

      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1/mybatisplus?useUnicode=true&characterEncoding=utf-8
          username: root
          password: root
      
    • mybatis-plus 日志信息配置

      mybatis-plus:
        configuration:
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      
    • 创建实体类 Dept

      package com.cmy.mybatis_plus.entity;
      
      import com.baomidou.mybatisplus.annotation.IdType;
      import com.baomidou.mybatisplus.annotation.TableId;
      import com.baomidou.mybatisplus.extension.activerecord.Model;
      
      /**
       * 使用 AR,继承 MP 中的 Model
       * Model 中提供了对数据库的 CRUD 操作
       *
       * @author chenmingyong
       */
      public class Dept extends Model<Dept> {
          @TableId(value = "id", type = IdType.AUTO)
          private Integer id;
          private String name;
          private String mobile;
          private Integer manager;
      
          public Integer getId() {
              return id;
          }
      
          public void setId(Integer id) {
              this.id = id;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getMobile() {
              return mobile;
          }
      
          public void setMobile(String mobile) {
              this.mobile = mobile;
          }
      
          public Integer getManager() {
              return manager;
          }
      
          public void setManager(Integer manager) {
              this.manager = manager;
          }
      
          @Override
          public String toString() {
              return "Dept{" +
                      "id=" + id +
                      ", name='" + name + '\'' +
                      ", mobile='" + mobile + '\'' +
                      ", manager=" + manager +
                      '}';
          }
      }
      
      
    • 自定义 DeptMapper 接口

      package com.cmy.mybatis_plus.mapper;
      
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.cmy.mybatis_plus.entity.Dept;
      
      /**
       * 此接口不会被使用,MP 需要使用 DeptMapper 获取到数据库的表的信息
       * 如果不定义此接口,MP 会报错,找不到表的定义信息
       */
      public interface DeptMapper extends BaseMapper<Dept> {
      }
      
      

      此接口不会被使用,MP 需要使用 DeptMapper 获取到数据库的表的信息,如果不定义此接口,MP 会报错,找不到表的定义信息

插入操作

/**
  * 测试 AR 插入操作
  */
@Test
public void testARInsert() {
    // 创建一个实体对象
    Dept dept = new Dept();
    dept.setName("技术部");
    dept.setMobile("010-12345678");
    dept.setManager(1);

    // 调用实体对象自己的方法进行插入操作
    // INSERT INTO dept ( name, mobile, manager ) VALUES ( ?, ?, ? )
    boolean result = dept.insert();
    System.out.println("ar insert result: " + result);
}

更新操作

/**
  * 根据主键 id 进行数据更新
  */
@Test
public void testARUpdateById() {
    // 创建一个实体对象
    Dept dept = new Dept();

    // 绑定对应 id
    dept.setId(1);
    dept.setMobile("010-11111111");
    dept.setManager(2);

    // 根据主键 id 进行数据更新
    // UPDATE dept SET mobile=?, manager=? WHERE id=?
    boolean result = dept.updateById();
    System.out.println("ar update result: " + result);
}

删除操作

/**
 * 根据主键 id 进行删除数据
 */
@Test
public void testARDeleteById() {
    // 创建一个实体对象
    Dept dept = new Dept();

    // 根据主键 id 进行数据删除
    // DELETE FROM dept WHERE id=?
    boolean result = dept.deleteById(2);
    System.out.println("ar delete result: " + result);
}

查询操作

/**
 * 根据主键 id 进行数据查询
 * 1. 按实体的主键能查出数据,返回一个对象
 * 2. 按实体的主键不能查出数据,返回null(不报错)
 */
@Test
public void testARSelectById() {
    /*
        // 方法 1
        Dept dept = new Dept();
        // 设置主键的值
        dept.setId(3);
        // SELECT id,name,mobile,manager FROM dept WHERE id=?
        Dept dept1 = dept.selectById();
        */
    // 方法 2
    Dept dept = new Dept();
    // SELECT id,name,mobile,manager FROM dept WHERE id=?
    Dept dept1 = dept.selectById(3);
    System.out.println("ar select result:" + dept1);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员陈_明勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值