![](https://cdn.zimug.com/wx-zimug.png)
* [小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac1%e7%af%87-%e6%95%b4%e5%90%88springboot%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b%e5%a2%9e%e5%88%a0%e6%94%b9%e6%9f%a5/.html)
* [小书MybatisPlus第2篇-条件构造器的应用及总结](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac2%e7%af%87-%e6%9d%a1%e4%bb%b6%e6%9e%84%e9%80%a0%e5%99%a8%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%8a%e6%80%bb%e7%bb%93/.html)
* [小书MybatisPlus第3篇-自定义SQL](http://www.zimug.com/other/java/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac3%e7%af%87-%e8%87%aa%e5%ae%9a%e4%b9%89sql/.html)
* [小书MybatisPlus第4篇-表格分页与下拉分页查询](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac3%e7%af%87-%e8%a1%a8%e6%a0%bc%e5%88%86%e9%a1%b5%e4%b8%8e%e4%b8%8b%e6%8b%89%e5%88%86%e9%a1%b5%e6%9f%a5%e8%af%a2/.html)
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
具体到使用层面,我们之前章节讲过使用Data Mapper 做数据的持久层操作。
~~~
User user = new User();
user.setName("字母哥");
user.setAge(18);
userMapper.insert(user); //Mybatis Mapper模式
~~~
现在我们使用ActiveRecord模式,用法如下,注意二者的区别
~~~
User user = new User();
user.setName("zimug");
user.setAge(18);
user.insert(); //ActiveRecord模式
~~~
## 一、使ActiveRecord模式生效
首先:需要让数据库表对应的数据持久层实体类。集成自Model<User>,并实现序列化接口。
~~~
@Data //lombok注解
@EqualsAndHashCode(callSuper = true)
public class User extends Model<User> implements Serializable {
private static final long serialVersionUID = 6401942840459021558L;
private Long id;
private String name;
private Integer age;
private String email;
}
~~~
其实定义一个Mapper继承自`BaseMapper<T>`,T代表数据持久层实体类。
~~~
public interface UserMapper extends BaseMapper<User> {
}
~~~
这样Mybatis Plus的ActiveRecord模式就生效了,默认的帮我们实现了如下的一些数据持久层方法。
![](https://img.kancloud.cn/00/57/00573d67670bc188fbe77caadfa5aef6_1006x496.png)
## 二、增删该查的实现
增加:向持久层实体类User对应的数据库表user,插入一条数据。
~~~
@Test
public void testInsert() {
User user = new User();
user.setName("zimug");
user.setAge(18);
user.setEmail("hadoopcn2@163.com");
boolean success = user.insert();
System.out.println("是否插入成功:"+success);
}
~~~
查询:从数据库表user查询所有数据
~~~
@Test
public void testSelect() {
User user = new User();
List<User> users = user.selectAll();
users.forEach(System.out::println);
}
~~~
添加或更新:
* 未设置ID,被视为insert操作,向数据库插入数据
* 如果设置ID,则先查询是否有此id的记录,如果有此id记录,则视为update,如果没有则视为insert
~~~
@Test
public void testUpdate() {
User user = new User();
user.setId(1283915378849751041L);
user.setAge(25);
boolean success = user.insertOrUpdate();
System.out.println("是否添加或更新成功(更新):"+success);
}
~~~
根据id在数据库表user中删除一条记录
~~~
@Test
public void testDelete() {
User user = new User();
user.setId(1283915378849751041L);
boolean success = user.deleteById();
System.out.println("是否删除成功:"+success);
}
~~~