Active Record模式和MP的Mapper模式的比较

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录(www.yoshu.net)。

ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言, 对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索

支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

总结:模型类对应关系型数据库中的一个表,操作我们的模型类可以实现强大的增删改查的功能

一、AR模式和MP的Mapper模式的比较

1.原有MP的Mapper模式

  • 创建项目完成Spring和MP的集成
  • 创建数据库表对应的实体类
  • 创建mapper接口并继承BaseMapper接口
  • 从Spring容器中获取Mapper接口的实例化对象完成数据库操作

描述:

通过以上流程,MP的操作模式较于原有Mybatis的数据库操作流程

没有任何变化,只是我们在编写代码的时候不用在mapper层声明

Sql语句或者XML文件了,提升开发效率。

2.MP的AR模式

  • 创建项目完成Spring和MP的集成
  • 创建数据库表对应的实体类,继承Model类
  • 在实体类中覆写pkVal方法.
  • 创建Mapper接口并继承BaseMapper接口
  • 创建Spring对象,让Spring容器完成对Mapper层的实例化扫描
  • 创建实体类对象,直接调用实体类从Model中继承的数据库方法完成
  • 数据库操作。

3.流程比较分析

MP的AR模式其实底层仍然使用的是Mapper层在完成数据库操作。只不过由我们自己调用Mapper对象操作数 据库,变成了通过实体类对象来调用Mapper完成数据库操作。从代码的物理视图上我们是看不到实体类调用Mapper的过程的。也就说,本质上仍然是Mapper层在操作数据库实体类型操作数据掩盖了底层的mapper的方法的调用。

二、AR模式的特点

AR模式较于传统的MP模式操作数据库,在代码体系中,我们不用在获取Mapper对象,然后再将实体类传入给mapper层完成数据库操作,直接使用实体类即可完成操作。

提升开发效率。

三、AR模式的使用代码示例

1.创建一个集成了MP的SSM项目

2.在pojo层创建实体类,并继承Model类,覆写pkVal的方法

@TableName("t_student")

public class Student extends Model<Student> {

@TableId(type = IdType.AUTO)

private Integer sid;

// @TableField("s_name") 指定的字段

@TableField("s_name")

private String sname;

private Integer sage;

// 重写方法 指明主键 返回主键字段对应的属性

@Override

protected Serializable pkVal() {

return this.sid;

}

}

不要忘了写Mapper

public interface StudentMapper extends BaseMapper<Student> {

}

使用AR模式完成数据库操作

添加:

@Test

public void testinsert(){

//启动容器

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

Student stu = new Student();

stu.setSname("段誉");

stu.setSage(70);

stu.setSphone("1234");

stu.setSsex("1");

//ar 模式 可以直接用对象操作数据

boolean insert = stu.insert();

System.out.println(insert);

}

// 先判断 id 15 数据是否存在 ,不存在 插入 存在 更新

boolean b = stu.insertOrUpdate();

System.out.println("b = " + b);

查询:

@Test

public void testQuery(){

//启动容器

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

Student stu = new Student();

stu.setSid(5);

Student student = stu.selectById();

System.out.println("student = " + student);

}

修改:

@Test

public void testUpdate(){

//启动容器

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

Student stu = new Student();

stu.setSid(5);

stu.setSname("东方不败");

boolean b = stu.updateById();

System.out.println("b = " + b);

}

删除:

@Test

public void testDelete(){

//启动容器

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

Student stu = new Student();

stu.setSid(5);

boolean b = stu.deleteById();

System.out.println("b = " + b);

}

开发中: 使用ar模式还xxxMapper模式?

如果是比较简单的curd 可以直接使用ar模式

如果是复杂的 推荐使用mapper模式

主营产品:吸塑机,泳圈,充气泳池,绝缘子,中间继电器,玩具加工机械,接触器,皮革加工机械