一,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);
}
④ 结果










Comments | NOTHING