MyBatisPlus系列第四篇:MyBatisPlus-ActiveRecord活动记录

习和通
2023-12-01

一、ActiveRecord简介

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

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

Jfinal也使用了AR

二、如何使用AR模式

package com.ming.mp.model;

import com.baomidou.mybatisplus.activerecord.Model;

import java.io.Serializable;

/**
 * ActiveRecord
 */
public class Employee extends Model<Employee> {
    /**
     * 指定当前实体类的主键属性
     * @return
     */
    @Override
    protected Serializable pkVal() {
        return this.id;
    }

    private  Integer id;

    private String lastName;

    private String email;

    private Integer gender;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", age=" + age +
                '}';
    }

  
}

继承Model后可以完成基本的CRUD操作

三、AR基本CRUD

注意AR和MP不能同时操作一个实体类,不然出现空指针异常
插入操作

    @Test
    public void testInsert(){
    	//INSERT INTO tbl_employee ( last_name, email, gender, age ) VALUES ( ?, ?, ?, ? ) 
        Employee employee = new Employee();
        employee.setLastName("AR1");
        employee.setEmail("87997798@qq.com");
        employee.setAge(18);
        employee.setGender(1);
        boolean insert = employee.insert();
        System.out.println(insert);
    }

AR 修改操作

	/**
	 * AR 修改操作
	 */
	@Test
	public void testARUpdate() {
		Employee employee = new Employee();
		employee.setId(20);
		employee.setLastName("宋老湿");
		employee.setEmail("sls@atguigu.com");
		employee.setGender(1);
		employee.setAge(36);
		boolean result = employee.updateById();
		//UPDATE tbl_employee SET last_name=?, email=?, gender=?, age=? WHERE id=? 
		System.out.println("result:" +result );
	}
	

AR 查询操作

	/**
	 * AR 查询操作
	 */
	@Test
	public void testARSelect() {
	
	Employee employee = new Employee();
		
	Employee result = employee.selectById(14);
	//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE id=?  
	System.out.println(result );
	
	employee.setId(14);
	Employee result = employee.selectById();
	//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE id=? 
	System.out.println(result )
		
		
	List<Employee> emps = employee.selectAll();
	//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee
	System.out.println(emps);
		
	List<Employee > emps= employee.selectList(new EntityWrapper<Employee>()
	.like("last_name", "老师"));
	//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE (last_name LIKE ?)
	System.out.println(emps);
		
	Integer result = employee.selectCount(new EntityWrapper<Employee>().eq("gender", 0));
	//SELECT COUNT(1) FROM tbl_employee WHERE (gender = ?)
	System.out.println("result: " +result );
		
	}

AR 删除操作 注意: 删除不存在的数据 逻辑上也是属于成功的

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

		//删除的数据库不存在,却返回成功true,update是0,原因是
		/**
	     * <p>
	     * 删除不存在的逻辑上属于成功
	     * </p>
	     *
	     * @param result 数据库操作返回影响条数
	     * @return boolean
	     */
		  //public static boolean delBool(Integer result) {
		      // return null != result && result >= 0;
		   //}
		employee.setId(2);
		boolean result = employee.deleteById();
		System.out.println("result:" +result );
		
	
		boolean result = employee.delete(new EntityWrapper<Employee>().like("last_name", "小"));
		System.out.println(result );
	}
	
	

AR 分页复杂操作

	
	/**
	 * AR  分页复杂操作
	 */
	@Test
	public void  testARPage() {
		
		Employee employee = new Employee();
		
		Page<Employee> page = employee.selectPage(new Page<>(1, 1), 
				new EntityWrapper<Employee>().like("last_name", "老"));
		List<Employee> emps = page.getRecords();
		System.out.println(emps);
	}

AR总结

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

语法糖:是指计算机语言中添加的某种语法,这种语法对原本语言的功能并没有影响.可以更方便开发者使用,可以避免出错的机会,让程序可读性更好.

2、 到此,我们简单领略了 Mybatis-Plus 的魅力与高效率,值得注意的一点是:我们提供了强大的代码生成器、可以快速生成各类代码、真正做到了即开即用

 类似资料: