MyBatisPlus 之 活动记录(ActiveRecord)

一、ActiveRecord(活动记录)

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

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

二、如何使用 AR 模式

  仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅:

@TableName(value = "tbl_employee")
public class Employee extends Model<Employee> {

    private Integer id;
    @TableField(value = "last_name")
    private String lastName;
    private String email;
    private Integer gender;
    private Integer age;

    @TableField(exist = false)
    private Double salary;

    /**
     * 指定当前类的主键属性
     * @return
     */
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}

三、AR 基本增删改查

  1、插入操作

    插入操作:

    /**
     * AR 插入操作
     * SQL 语句
     */
    @Test
    public void testARInsert() {
        Employee emp = new Employee();
        emp.setLastName("宋老师");
        emp.setAge(20);
        emp.setGender(1);
        emp.setEmail("sls@126.com");

        boolean result = emp.insert();
        System.out.println("result = " + result);
    }

  2、修改操作

    根据 ID 进行修改操作:

    /**
     * AR 修改操作
     */
    @Test
    public void testARUpdateById(){
        Employee employee = new Employee(16,"JKL","JKL@qq.com",0,15);
        System.out.println(employee.updateById());
    }

  3、删除操作

    根据ID删除操作:

    /**
     * 删除操作
     *
     * 注意:删除不存在的数据逻辑上也是成功的
     */
    @Test
    public void testARDelete(){
        Employee employee = new Employee();
        //通过id删除数据
        boolean result = employee.deleteById(4);
        System.out.println("通过ID删除结果=" + result);

        //根据条件删除数据(在逻辑上删除不存在的数据也是返回True)
        System.out.println("通过条件删除结果=" + employee.delete(new EntityWrapper<Employee>().eq("last_name","jack")));
    }

  4、查询操作

    (1)根据ID查询

    /**
     * 根据ID查询
     */
    @Test
    public void testARSelectById() {
        Employee emp = new Employee();
        emp.setId(1);

        Employee employee = emp.selectById();
        System.out.println("employee = " + employee);

        Employee emp2 = emp.selectById(1);
        System.out.println("emp2 = " + emp2);
    }

    (2)查询所有数据

    @Test
    public void testARSelectAll(){
        Employee employee = new Employee();

        //查询所有操作
        System.out.println(employee.selectAll());

        //使用Wrapper以及AR进行模糊查询
        employee.selectList(new EntityWrapper<Employee>().like("last_name","J")).forEach(value -> {
            System.out.println(value);
        });

    }

    (3)根据条件查询数据

    /**
     * 根据条件查询数据
     */
    @Test
    public void testARSelectList(){
        Employee employee = new Employee();
        List<Employee> emps = employee.selectList(new EntityWrapper<Employee>().like("last_name", "老师"));

        emps.forEach(System.out::println);
    }

    (4)根据条件查询数量

    /**
     * 根据条件查询数据数量
     */
    @Test
    public void testARSelectCount(){
        Employee employee = new Employee();
        int count = employee.selectCount(new EntityWrapper<Employee>().like("gender", "0"));
        System.out.println("count = " + count);
    }

    (5)分页复杂操作

    /**
     * AR 分页复杂操作
     */
    @Test
    public void testARSelectPage(){
        Employee employee = new Employee();

        //获取分页所有数据
        Page<Employee> page = employee.selectPage(new Page<Employee>(1, 2), new EntityWrapper<Employee>().like("last_name", "老"));

        //获取分页数据数
        List<Employee> records = page.getRecords();
    }

 

四、AR 小结

  AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用 MyBatis 对应的方法,类似于语法糖。

  以 insert 方法为例:

   其本质还是获取到 sqlSession 对象然后进行插入。

  到底,简单领略了 MyBatis 的魅力与高效,值得注意的一点是,我们提供了强大的代码生成器,可以快速生成各类代码,真正的做到了即开即用。

原文地址:https://www.cnblogs.com/niujifei/p/15340521.html