MybatisPlus ActiveRecord

发布于 2021-12-16  2.39k 次阅读


一,ActiveRecord的简介  

ActiveRecord(间称AR),这个模式的框架一直被很多动态语言(PHP,Ruby等)使用,因为动态语言的类型是动态检测的语法也相对简单,很兼容这个模式,但java作为静态语言,ActiveRecord并不是那么友好,但也一直在探索,MybatisPlus ActiveRecord就是结果

ActiveRecord的概念:ActiveRecord也属于ORM(对象关系映射),由Rails最早提出,遵循标准的ORM模型

ActiveRecord的主要思想:

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

ActiveRecord比原生MybatisPlus还要简单,只需要在pojo类种继承一个Model就可以进行操作CRUD,Model和BaseMapper作用差不多都封装了很多对表的操作方法,但Model继承在实体类上,BaseMapper需要映射接口实现

注:MybatisPlus ActiveRecord在某些方面其实还是不完善的,在调用Model时前提必须把该类的映射接口先声明并且继承BaseMapper接口,不然会报错,因为底层依然是使用BaseMapper进行SQL注入

二,Model的方法

Model抽象类没有其他接口和父类,方法也没有BaseMapper那么多,但基本的CRUD和条件判断都是有的

增加:

  • insert():插入
  • insertOrUpdate:插入或者更新

更新:

  • updateById():按照id更新
  • update(Wrapper<T> updateWrapper):按照条件进行更新,条件判断也是使用Wrapper

删除:

  • deleteById(Serializable id):按照id删
  • delete(Wrapper<T> queryWrapper):按照条件删除

查询:

  • List<T> selectAll():查询所有,就是select * from
  • selectById(Serializable id):id进行查询
  • selectList(Wrapper<T> queryWrapper):按照条件进行多数据查询
  • selectOne(Wrapper<T> queryWrapper):按照条件单条查询
  • selectPage(E page, Wrapper<T> queryWrapper):分页查询
  • selectCount(Wrapper<T> queryWrapper):记录条数查询

直接SQL操作:

  • sqlStatement(String sqlMethod):直接写SQL进行操作

方法基本和在使用BaseMapper时是一样的

三,ActiveRecord的使用

一,查询

① 实体类

@Data
@ToString
@TableName("mybatistest")
public class activerecord_pojo extends Model<activerecord_pojo> {
    @TableId(type = IdType.AUTO)
    int id;
    String name;
    int sex;
    int age;
}

② 映射接口(这个接口必须要有而且需要继承BaseMapper)

public interface activecord_mapper extends BaseMapper<activerecord_pojo> {//泛型也需要传入
}

③ 测试

@SpringBootTest
public class activerecord {
    @Test
    public void test1(){
        //实例化类
        activerecord_pojo activerecordpojo = new activerecord_pojo();
        //通过这个类调用Model中的方法
        activerecord_pojo pojo = activerecordpojo.selectById(1L);
        System.out.println(pojo);

        //wrapper
        QueryWrapper<activerecord_pojo> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name","da");

        //条件列表查询
        List<activerecord_pojo> pojos = activerecordpojo.selectList(queryWrapper);
        System.out.println(pojos);  

    }}

④ 结果

二,删除

实体类和映射接口是一样的

① 实体类

② 映射接口(这个接口必须要有而且需要继承BaseMapper)

③ 测试

@Test
void delete(){
    activerecord_pojo activerecordpojo = new activerecord_pojo();
    QueryWrapper<activerecord_pojo> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name","da").eq("age","21");
    //按照条件删除
    boolean delete = activerecordpojo.delete(queryWrapper);
    System.out.println(delete);
}

④ 结果

三,插入

③ 测试

@Test
void insert(){
    activerecord_pojo activerecordpojo = new activerecord_pojo();
    //设置插入的信息
    activerecordpojo.setName("model_insert");
    activerecordpojo.setAge(12);
    activerecordpojo.setSex(1);
    //插入成功返回true
    boolean insert = activerecordpojo.insert();
    System.out.println(insert);
}

④ 结果

四,更新

③ 测试

@Test
void update(){
    activerecord_pojo activerecordpojo = new activerecord_pojo();
    //设置更新的信息,按照id更新的话,必须设置id
    activerecordpojo.setId(6);
    activerecordpojo.setName("model_update");
    activerecordpojo.setAge(12);
    activerecordpojo.setSex(1);
    //成功返回true
    boolean b = activerecordpojo.updateById();
    System.out.println(b);
}

④ 结果


路漫漫其修远兮,吾将上下而求索