Mybatis-Plus的ActiveRecord

举报
别团等shy哥发育 发表于 2023/02/04 16:43:11 2023/02/04
【摘要】 @toc 一、简介        Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。        ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定...

@toc

一、简介

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

二、如何使用AR模式

仅仅需要让实体类继承Model类且实现主键指定方法即可。
例如:

package com.baomidou.mybatisplus.bean;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;

import java.io.Serializable;

/**
 * @TableName
 *  value:指定当前实体类所对应的表名
 */
@Data
@TableName(value = "tbl_employee")
public class Employee extends Model<Employee> {
    /**
     * @TableId:
     *  value:指定表中的主键列的列名,如果实体属性名和列名一致,可以省略不指定
     *  type:指定主键策略
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;         //int

    @TableField(value = "last_name")
    private String lastName;

    @TableField(value = "email")
    private String email;

    @TableField(value = "gender")
    private Integer gender;

    @TableField(value = "age")
    private Integer age;

    /**
     * 指定当前实体类的主键属性
     * @return
     */
    @Override
    public Serializable pkVal() {
        return id;
    }
}

三、CRUD测试

以下都是在依赖引入正确的前提下进行的,在SpringBoot的测试类中进行测试,如果想看依赖文件请查看我mybatis-plus专栏的其他文章。

mybatis-plus依赖版本:3.4.3.1

在这里插入图片描述

3.1 AR 插入操作

@Test
    public void testARInsert(){
        Employee employee=new Employee();
        employee.setLastName("王老师");
        employee.setEmail("wls@guigu.com");
        employee.setGender(0);
        employee.setAge(22);

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

在这里插入图片描述
在这里插入图片描述

3.2 AR 修改操作

  @Test
    public void testARUpdate(){
        Employee employee=new Employee();
        employee.setId(14);
        employee.setLastName("张老师");
        employee.setEmail("zls@guigu.com");
        employee.setGender(1);
        employee.setAge(44);

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

在这里插入图片描述
在这里插入图片描述

3.3 AR 查询操作

3.3.1 根据id查询

 		Employee employee=new Employee();

        Employee result = employee.selectById(14);
        System.out.println(result);

在这里插入图片描述

  Employee employee=new Employee();

      /*  Employee result = employee.selectById(14);
        System.out.println(result);*/
        employee.setId(14);
        Employee result = employee.selectById();
        System.out.println(result);

在这里插入图片描述

3.3.2 查询所有

   List<Employee> employeeList = employee.selectAll();
   employeeList.forEach(System.out::println);

在这里插入图片描述
在这里插入图片描述

3.3.3 用条件构造器查询

查出所有姓名中带老师的员工

 List<Employee> employeeList = employee.selectList(new QueryWrapper<Employee>()
                .like("last_name", "老师")
        );
    employeeList.forEach(System.out::println);

在这里插入图片描述
查询女员工的总数

 Integer result = employee.selectCount(new QueryWrapper<Employee>()
                .eq("gender", 0)
        );
        System.out.println("result="+result);

在这里插入图片描述

3.4、AR 分页复杂操作

查询出名字中带"老"的所有员工,并分页,每页两条记录,显示第一页。

@Test
    public void testARPage(){
        Employee employee=new Employee();
        Page<Employee> employeePage = employee.selectPage(new Page<Employee>(1, 2),
                new QueryWrapper<Employee>()
                        .like("last_name", "老")
        );
        List<Employee> records = employeePage.getRecords();
        records.forEach(System.out::println);
    }

在这里插入图片描述
在这里插入图片描述

3.5、分页删除操作

删除之前
在这里插入图片描述

3.5.1 通过id删除

   Employee employee=new Employee();
    boolean result = employee.deleteById(5);
    System.out.println(result);

在这里插入图片描述
在这里插入图片描述

       Employee employee=new Employee();
        employee.setId(6);
        boolean result = employee.deleteById();
        System.out.println(result);

在这里插入图片描述
在这里插入图片描述

3.5.2 使用条件构造器删除

Employee employee=new Employee();
        boolean result = employee.delete(new QueryWrapper<Employee>()
                .like("last_name", "苍")
        );
        System.out.println(result);

在这里插入图片描述
在这里插入图片描述

四、小结

  • AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用的 Mybatis 对应的方法,类似于语法糖
    语法糖是指计算机语言中添加的某种语法,这种语法对原本语言的功能并没有影响.可以更方便开发者使用,可以避免出错的机会,让程序可读性更好.
  • 到此,我们简单领略了 Mybatis-Plus 的魅力与高效率,值得注意的一点是:我们提供了强大的代码生成器,可以快速生成各类代码,真正的做到了即开即用
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。