ActiveRecord(活动记录)

1,321 阅读2分钟

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

什么是Active Record?

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的 一个表,而模型类的一个实例对应表中的一行记录。 ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言, 对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索。

ActiveRecord 也属于 ORM 层,由 Rails 最早提出,遵循标准的 ORM 模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。

ActiveRecord 的主要思想是:

  1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的 Field ;
  2. ActiveRecord 同时负责把自己持久化,在 ActiveRecord 中封装了对数据库的访问,即 CURD; ;
  1. ActiveRecord 是一种领域模型 (Domain Model) ,封装了部分业务逻辑;

ActiveRecord 比较适用于:

  1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时 , ActiveRecord 是非常方便的,即你的业务逻辑大多数是对单表操作;
  2. 当发生跨表的操作时 , 往往会配合使用事务脚本 (Transaction Script) ,把跨表事务提升到事务脚本中;
  1. ActiveRecord 最大优点是简单 , 直观。 一个类就包括了数据访问和业务逻辑 . 如果配合代码生成器使用就更方便了;

插入操作

AR操作如果是第一次用的小伙伴会有十分奇怪的感觉,我们要将我们的实体类去继承Model抽象类,在这个抽象类当中有很多的方法去实现SQL操作,我们要去重写主键值

之后在我们的测试方法中直接使用就可以

	@Test
    public void demo1(){
        Employee employee = new Employee();
        employee.setName("测试1");
        employee.setEmail("1@测试邮箱");
        employee.setGender(1);
        employee.setAge(35);

        boolean result = employee.insert();
        System.out.println(result);
    }

修改操作

@Test
    public void demo2(){
        Employee employee = new Employee();
        employee.setId(6);
        employee.setName("修改1");
        employee.setEmail("1@修改邮箱");
        employee.setGender(1);
        employee.setAge(35);

        boolean result = employee.updateById();
        System.out.println(result);
    }

查找操作

根据主键查询

查询所有

这只是基本的查询操作,当然他也有根据条件查询的这种复杂的操作

 	@Test
    public void demo5(){
        Employee employee =new Employee();
        List<Employee> employees = employee.selectList(
                new EntityWrapper<Employee>()
                        .like("name","a")
        );
        System.out.println(employees);
        
        //查询数量
        int count = employee.selectCount(
                new EntityWrapper<Employee>()
                        .eq("gender", 0)
        );
        System.out.println(count);
    }

删除操作

其实使用方法是差不多的,没有必要全部列举出来,我们看一下有关删除的方法