ActiveRecord
ActiveRecord(简称AR)也属于ORM(对象关系映射)层,由Rails最早提出,遵循标准的ORM模型;表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简介易懂。
ActiveRecord的主要思想是:
- 每一个数据库表对应创建一个类,类的每一个对象实例对英语数据库中表的一行记录;通常表的每个字段在类种都有相应的Field;
- ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CRUD;
- ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑;
实例
在MyBatisPlus中,开启AR非常简单,只需要将实体对象集成Model<T>即可
User实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User extends Model<User> {
//指定主键为自增
@TableId(type = IdType.AUTO)
private Long id;
//指定数据表中字段名
@TableField(value = "user_name")
private String userName;
private String password;
private String name;
private Integer age;
private String email;
//指定该字段在表中是不存在的
@TableField(exist = false)
private String address;
}
Mapper:
AR底层依然是使用mapper来操作,所以mapper接口不可以省略:
public interface UserMapper extends BaseMapper<User> {
}
查询数据:selectById
@RunWith(SpringRunner.class)
@SpringBootTest
class ARTest {
@Test
public void testSelectByID(){
User user = new User();
User user1 = user.selectById(2l);
System.out.println(user1);
}
}
控制台打印:
User(id=2, userName=lisi, password=123456, name=李四, age=28, email=test2@qq.com, address=null)
查询数据:selectList
@Test
public void testSelectList(){
User user = new User();
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", "1");//查询条件:age大于1
List<User> users = user.selectList(wrapper);
for (User u : users)
System.out.println(u);
}
控制台打印:
User(id=2, userName=三狗, password=123456, name=李四, age=88, email=test2@qq.com, address=null)
User(id=4, userName=zhaoliu, password=123456, name=赵六, age=48, email=test4@qq.com, address=null)
新增数据:insert
@Test
public void testInsert(){
User user = new User();
user.setUserName("ergou");
user.setName("二狗");
user.setAge(18);
user.setPassword("123456");
boolean insert = user.insert();
System.out.println(insert);
}
更新数据:updateById
@Test
public void testUpdateById(){
//根据id更新
User user = new User();
user.setId(2l);//更新条件
user.setAge(88);//更新数据
boolean result = user.updateById();
System.out.println(result);
}
更新数据:update
@Test
public void testUpdate(){
User user = new User();
//根据条件更新
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.set("user_name", "三狗");//更新数据
wrapper.eq("age", "88");//更新条件
boolean result = user.update(wrapper);
System.out.println(result);
}
删除数据:deleteById
@Test
public void testDeleteById(){
User user = new User();
user.setId(5L);
boolean result = user.deleteById();
System.out.println(result);
}
也可以根据条件删除,使用方法和上面一致。