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