小书MybatisPlus第5篇-Active Record模式精讲
2023-02-18 15:36:57 时间
本文为一个系列中的第五节,前四节访问如下地址:
- 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查
- 小书MybatisPlus第2篇-条件构造器的应用及总结
- 小书MybatisPlus第3篇-自定义SQL
- 小书MybatisPlus第4篇-表格分页与下拉分页查询
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
@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模式就生效了,默认的帮我们实现了如下的一些数据持久层方法。
二、增删该查的实现
增加:向持久层实体类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);
}
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
相关文章
- 在 C# 9 中使用 foreach 扩展
- 如何实现隐式类型转换
- 如何指定多个项目的 InternalsVisibleTo
- 如何在多个应用程序中共享日志配置
- 为 ASPNETCORE 7 项目添加 Serilog
- 如何在路由绑定中使用 IParsable
- 如何使用 EF Core 7 批量删除数据
- 如何在 .Net 7 中将 Query 绑定到数组
- 实现 .Net 7 下的数据库定时检查
- 使用 BenchmarkDotNet 比较指定容量的 List 的性能
- 如何使用 IdGen 生成 UID
- 通过 CancellationToken 提高 Web 性能
- 为什么总是应该考虑给定 List 的初始大小
- 为什么 Random.Shared 是线程安全的
- 乡亲们,我们创建了 Dapr 中文交流频道
- oh,我的老伙计,你看看这近五十个dapr视频
- 字符串池化,减少了三分之一的内存占用
- 简单三分钟,本地搭建 k8s
- 基于 Blazor 打造一款实时字幕
- MVP on Board 没用小技巧 👌