MyBatus-Plus之ActiveRecord
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 + '}'; } }
-
自定义
Dept
的Mapper
接口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);
}