本文为一个系列中的第五节,前四节访问如下地址:

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);
}

欢迎关注我的博客,里面有很多精品合集

  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

最新文章

  1. [书目20160526]Brain Rules 让大脑自由:释放天赋的12条定律
  2. java向oracle数据库中插入当前时间
  3. Navicat(连接) -1之常规设置
  4. flex Chrome flash调试时 出现Shockwave flash has crashed的解决办法
  5. merge into Oracle里的 saveOrUapdate
  6. IOS UITextField &amp;UITextView
  7. Git详解之三:Git分支
  8. 基数排序的理解和实现(Java)
  9. 结对项目junit测试用例
  10. [Big Data - ELK] ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
  11. tkinter widget
  12. C#代码连接Oracle数据库一段时间以后[connection lost contact]的问题
  13. Chapter 7 Integrity(完整性), Views(视图), Security(安全性), and Catalogs(目录)
  14. 树莓派项目——基于树莓派的WIFI网络互传系统设计
  15. 关于MyBatis的工作流程和与JDBC的比较与Hibernate的比较
  16. mybatis resultMap 映射配置
  17. GO学习笔记 - 没有条件的 switch 同 switch true 一样。
  18. (转)select、poll、epoll之间的区别
  19. python学习笔记(十)完善数据库操作
  20. mac软件下载

热门文章

  1. [问题解决]coding时修改代码键入前边后边的自动删除
  2. matplotlib 强化学习
  3. Python3-算法-选择排序
  4. webstorm 调试 typescript
  5. git和github入门指南(5)
  6. Jmeter(十四) - 从入门到精通 - JMeter定时器 - 下篇(详解教程)
  7. Python必须知道的异常处理
  8. 重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」
  9. web网页动态分享facebook和twitter
  10. 快讯:asuldb再立功,捕获史前大蛤