什么是ActiveRecord?
ActiveRecord也属于ORM(对象关系映射)层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。
ActiveRecord的主要思想是:
- 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field;
- ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;
- ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑;
1、开启AR之旅
在MP中,开启AR非常简单,只需要将实体对象继承Model即可。
package com.lagou.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data // getter setter toString
@NoArgsConstructor //生成无参构造
@AllArgsConstructor // 生成全参构造
//@TableName("tb_user")
public class User extends Model<User> {
//@TableId(type = IdType.AUTO)
private Long id;
@TableField(select = true) //查询的时候,不返回该字段的值
private String name;
private Integer age;
@TableField(value = "email") // 解决字段名不一致问题
private String mail;
@TableField(exist = false) // 该字段在数据库表中不存在
private String address;
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
@TableLogic
private Integer deleted;
}
2、CURD操作测试
package com.lagou.lagoumpspringboot;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lagou.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestAR {
/*
在AR模式下,完成根据主键查询
*/
@Test
public void testARSelectById(){
User user = new User();
user.setId(12L);
User user1 = user.selectById();
System.out.println(user1);
}
/*
在AR模式下,完成添加操作
*/
@Test
public void testARInsert(){
User user = new User();
user.setName("墨竹");
user.setAge(18);
user.setMail("mozhu@lagou.com");
boolean insert = user.insert();
System.out.println(insert);
}
/*
在AR模式下,完成更新操作
*/
@Test
public void testARUpate(){
User user = new User();
User user1 = user.selectById(12L);
user.setId(12L);
user.setName("讲师子慕");
user.setVersion(user1.getVersion());
boolean insert = user.updateById();
System.out.println(insert);
}
/*
在AR模式下,完成删除操作
*/
@Test
public void testARDelete(){
User user = new User();
//user.setId(16L);
boolean b = user.deleteById(16L);
System.out.println(b);
}
/*
在AR模式下,根据条件进行查询
*/
@Test
public void testARFindByWrapper(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age","20");
User user = new User();
List<User> users = user.selectList(queryWrapper);
for (User user1 : users) {
System.out.println(user1);
}
}
}