MyBatisPlus的ActiveRecord

一、ActiveRecord活动记录

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

二、AR基本CRUD

需要让实体类继承Model

public class Employee extends Model<Employee>

子类继承了父类的增删改查的方法
在这里插入图片描述

插入操作

    @Test
    public void testARInsert(){
        Employee employee = new Employee();
        employee.setLastName("zhangsan");
        employee.setEmail("zhang@qq.com");
        employee.setGender(1);
        employee.setAge(33);

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

打印日志:
在这里插入图片描述

修改操作

updateById通过id值修改

    @Test
    public void testARUpdateById(){
        Employee employee = new Employee();
        employee.setId(17);
        employee.setLastName("lisi");
        employee.setAge(11);

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

打印日志:
在这里插入图片描述
带条件的update

    @Test
    public void testARUpdateById(){
        Employee employee = new Employee();
        employee.setLastName("lisi111");
        employee.setAge(111);

        boolean result = employee.update(new QueryWrapper<Employee>()
                .eq("last_name","lisi")
                .eq("age",11)
        );
        System.out.println("result:" + result);
    }

打印日志:
在这里插入图片描述

查询操作

selectById方法

    @Test
    public void testARSelectById(){
        Employee employee = new Employee();
        employee.setId(17);

        Employee employee1 = employee.selectById();

        System.out.println(employee1);
    }

打印日志:
在这里插入图片描述
selectOne带查询条件

    @Test
    public void testARSelectOne(){

        Employee employee = new Employee();
        Employee selectOne = employee.selectOne(new QueryWrapper<Employee>()
                .eq("last_name", "Tom")
        );
        System.out.println(selectOne);
    }

打印日志:
在这里插入图片描述
selectList带条件查询,返回集合

    @Test
    public void testARSelectList(){

        Employee employee = new Employee();
        List<Employee> employees = employee.selectList(new QueryWrapper<Employee>()
                .eq("last_name", "mpTestInsert")
        );
        
        for (Employee emp : employees){
            System.out.println(emp);
        }
    }

打印日志:
在这里插入图片描述
selectAll返回全部

    @Test
    public void testARSelectAll(){

        Employee employee = new Employee();
        List<Employee> employees = employee.selectAll();
        for (Employee emp : employees){
            System.out.println(emp);
        }
    }

打印日志:
在这里插入图片描述
selectCount返回符合查询条件的记录数


    @Test
    public void testARSelectCount(){

        Employee employee = new Employee();
        Integer selectCount = employee.selectCount(new QueryWrapper<Employee>()
                .eq("last_name", "mpTestInsert")
        );
        System.out.println("Count:" + selectCount);
    }

打印日志:
在这里插入图片描述
selectPage返回符合查询条件的分页对象

    @Test
    public void testARSelectPage(){

        Employee employee = new Employee();

        Page<Employee> employeePage = employee.selectPage(new Page<Employee>(1, 2), new QueryWrapper<Employee>()
                .eq("last_name", "mpTestInsert")
        );
        Object[] records = employeePage.getRecords().toArray();
        int start = (int) ((employeePage.getCurrent() - 1) * employeePage.getSize());
        int end = (int) (start + employeePage.getSize());
        for (int i = start; i < end; i++){
            System.out.println(records[i]);
        }
        
    }

打印日志:
在这里插入图片描述
分页查询并没有使用limit关键字,实际上MyBatisPlus还是使用的MyBatis实现的内存分页,而并不是物理分页,实现物理分页可以借用PageHelper插件。

删除操作

deleteById方法


    @Test
    public void testARDeleteById(){
        Employee employee = new Employee();
        employee.setId(17);
        boolean result = employee.deleteById();
        System.out.println("result:" + result);
    }

打印日志:
在这里插入图片描述
delete删除符合查询条件的记录

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

        boolean result = employee.delete(new QueryWrapper<Employee>()
                .eq("last_name","张老师")
        );
        System.out.println("result:" + result);
    }

打印日志:
在这里插入图片描述

三、底层原理

AR的增删改查都是子类调用父类Model里面实现的方法,父类有sqlSession属性,通过sqlSession进而调用MyBatis接口实现类封装好实现方法

例如selectAll()

    public List<T> selectAll() {
        SqlSession sqlSession = this.sqlSession();

        List var2;
        try {
            var2 = sqlSession.selectList(this.sqlStatement(SqlMethod.SELECT_LIST));
        } finally {
            this.closeSqlSession(sqlSession);
        }

        return var2;
    }

在这里插入图片描述

  @Override
  public <E> List<E> selectList(String statement) {
    return this.selectList(statement, null);
  }

  @Override
  public <E> List<E> selectList(String statement, Object parameter) {
    return this.selectList(statement, parameter, RowBounds.DEFAULT);
  }

  @Override
  public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {
    try {
      MappedStatement ms = configuration.getMappedStatement(statement);
      return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error querying database.  Cause: " + e, e);
    } finally {
      ErrorContext.instance().reset();
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值