前言
Active Record(活动记录),简称AR,是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord 严格遵循标准的 ORM 模型:表映射到实体对象,列映射到实体对象属性。
应用到实际即可以通过实体类对象对数据库进行增删改查操作,在service中操作其他表的数据的时候,不需要再注入其他表的mapper了,直接new一个对象,进行操作即可
使用AR模式之前:
@Autowired
private FinanceOrderLogMapper financeOrderLogMapper;
private void test(){
FinanceOrderLog financeOrderLog = financeOrderLogMapper.selectById(1);
}
使用AR模式之前:
private void test(){
FinanceOrderLog financeOrderLog = new FinanceOrderLog();
financeOrderLog.selectById(1);
}
// 或者
private void test(){
FinanceOrderLog financeOrderLog = new FinanceOrderLog();
financeOrderLog.setId(1);
financeOrderLog.selectById();
}
具体实现
在实体类上继承Model类即可
@Data
@TableName("area")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "区域表")
public class Area extends Model<Area> {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键id")
private Integer id;
}
注意:Model的泛型需要指定,而且泛型的类需要有与之对应的mapper
同时该模式只支持model内定义的方法,如果是在mapper.xml中自定义的sql语句,还是需要通过mapper来调用,model不能调用自定义sql语句
AR模式使用公共字段
如果使用公共字段的话,所有实体类都需要继承一个公共的类,将id、create_time等字段抽取为公共字段
而使用AR模式的话,需要继承Model类
众所周知,java是不支持多继承的,那如何能够实现同时使用AR模式,又能够继承公共的类呢
我们可以让公共的类去继承Model类,然后为公共od增加泛型,实体类再继承公共类,这样就可以实现既使用AR模式又使用公共类了
公共类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity<T extends Model<?>> extends Model<T> implements Serializable {
/**
* 主键id
*/
@NotNull
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private Integer id;
// ...其他字段
}
实体类:
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("business_article")
@ApiModel(value = "业务表-文章主体表")
public class BusinessArticle extends BaseEntity<BusinessArticle> {
private static final long serialVersionUID = 1L;
/**
* 文章url
*/
@ApiModelProperty(value="文章url")
private String url;
// ...其他字段
}
总结
AR模式可以减少其他mapper的注入,能够提升代码简洁度
👍 欢迎前往博客主页查看更多内容
👍 如果觉得不错,期待您的点赞、收藏、评论、关注
👍 如有错误欢迎指正!