MyBatis-Plus AR模式深度解析:告别冗余DAO层

本文介绍了Active Record领域模型模式,它一个模型类对应数据库一个表,实例对应一行记录,广受动态语言喜爱。Java的MP对其进行探索,实体类继承Model类并实现主键指定方法可开启AR之旅,还详细介绍了AR的插入、更新、查询、删除和分页操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis-Plus 的 AR(Active Record)模式是一种面向对象的数据库操作模式,通过实体类直接进行 CRUD 操作,简化了开发流程。以下是详细的实现步骤和示例:

1. 创建数据库表

首先,创建一个数据库表。例如,创建一个 department 表:

CREATE TABLE `department` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `sn` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 创建实体类

实体类需要继承 Model<T> 类,并指定操作的实体类泛型。例如:

@Setter
@Getter
@TableName("department")
public class Department extends Model<Department> {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private String sn;
}
3. 创建 Mapper 接口

创建一个对应的 Mapper 接口,继承 BaseMapper<T> 接口:

public interface DepartmentMapper extends BaseMapper<Department> {
}
4. 编写测试类

在测试类中,可以使用实体类的方法进行 CRUD 操作。例如:

@SpringBootTest
public class ARTest {

    @Test
    public void testInsert() {
        Department department = new Department();
        department.setName("小卖部");
        department.setSn("xmb");
        boolean result = department.insert();
        System.out.println("插入结果: " + result);
    }

    @Test
    public void testDelete() {
        Department department = new Department();
        boolean result = department.deleteById(1L);
        System.out.println("删除结果: " + result);
    }

    @Test
    public void testUpdate() {
        Department department = new Department();
        department.setId(1L);
        department.setName("小卖部2");
        department.setSn("xmb2");
        boolean result = department.updateById();
        System.out.println("更新结果: " + result);
    }

    @Test
    public void testGet() {
        Department department = new Department();
        Department result = department.selectById(1L);
        System.out.println("查询结果: " + result);
    }

    @Test
    public void testList() {
        Department department = new Department();
        List<Department> result = department.selectAll();
        System.out.println("查询所有结果: " + result);
    }
}
5. 常用 API

MyBatis-Plus 的 AR 模式提供了以下常用方法:

  • 插入

    • boolean insert():插入一条记录。

    • boolean insertOrUpdate():插入或更新一条记录。

  • 删除

    • boolean deleteById(Serializable id):根据主键删除记录。

    • boolean delete(Wrapper<T> queryWrapper):根据条件删除记录。

  • 更新

    • boolean updateById():根据主键更新记录。

    • boolean update(Wrapper<T> updateWrapper):根据条件更新记录。

  • 查询

    • T selectById(Serializable id):根据主键查询记录。

    • List<T> selectAll():查询所有记录。

    • List<T> selectList(Wrapper<T> queryWrapper):根据条件查询记录。

    • T selectOne(Wrapper<T> queryWrapper):查询一条记录。

    • Integer selectCount(Wrapper<T> queryWrapper):查询总记录数。

6. 原理

AR 模式通过调用 sqlSession 执行 SQL 语句。例如,selectById 方法的实现如下:

public T selectById(Serializable id) {
    SqlSession sqlSession = sqlSession();
    try {
        return sqlSession.selectOne(sqlStatement(SqlMethod.SELECT_BY_ID), id);
    } finally {
        closeSqlSession(sqlSession);
    }
}

通过 sqlStatement 方法生成 SQL 语句,并通过 sqlSession 执行查询操作。

希望这份指南能帮助你更好地理解和使用 MyBatis-Plus 的 AR 模式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值