简介

说明

        本文介绍MybatisPlus的Active Record的用法。这个模式不太常用,了解即可。

Active Record简介

        Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索,仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅。

Model方法如下(所在包:com/baomidou/mybatisplus/extension/activerecord/Model.java)

Mybatis-Plus--Active Record--使用/教程/实例_spring

实例

依赖与配置

application.yml

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 222333
url: jdbc:mysql://127.0.0.1:3306/mp?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jpa:
hibernate:
ddl-auto: none

# mybatis-plus配置控制台打印完整带参数SQL语句
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

依赖

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

代码

entity

package com.example.demo.entity;

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.Data;

@Data
@TableName(value = "t_user")
public class User extends Model<User> {
@TableId(value = "id", type = IdType.INPUT)
private Long id;
private String name;

private Integer age;
}

mapper

public interface UserMapper extends BaseMapper<User> {
}

controller

package com.example.demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.example.demo.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/insertMulti")
public void insertMulti() {
User user = new User();
for (long i = 0; i < 10; i++) {
user.setId(i);
user.setName("Iron Man" + i);
if (i < 5) {
user.setAge(20);
} else {
user.setAge(23);
}
user.insert();
}
}

@PostMapping("/delete")
public void delete(Long id) {
new User().deleteById(id);
}

@PostMapping("/update")
public void update(User user) {
user.updateById();
}

@GetMapping("/select")
public List<User> select(User user) {
LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery();
if (user.getName() != null && !user.getName().isEmpty()) {
wrapper.eq(User::getName, user.getName());
}
return user.selectList(wrapper);
}
}