MyBatisPlus笔记04 ActiveRecord
coconutnut

https://www.bilibili.com/video/BV1rE41197jR

P40~45

属于ORM(对象关系映射)层

主要思想:

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

开启AR

实体对象继承Model即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User extends Model<User> {

@TableId(type = IdType.AUTO)
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;

}

测试

不需要UserMapper了,直接查询

1
2
3
4
5
6
7
@Test
public void testSelectById() {
User user = new User();
user.setId(2L);
User user2 = user.selectById();
System.out.println(user2);
}

运行输出

1
User(id=2, userName=lisi, password=123456, name=李四, age=20, email=test2@itcast.cn)

对比以前的查询方式

1
2
3
4
5
6
7
8
@Autowired
private UserMapper userMapper;

@Test
public void testSelectById() {
User user = this.userMapper.selectById(2L);
System.out.println("result = " + user);
}

使用AR后,不需要显示的注入UserMapper,但是这个类还是需要的

1
2
public interface UserMapper extends BaseMapper<User> {
}

如果把这个删了就运行不了了

CRUD

查询

方法一:同上

方法二:条件查询

1
2
3
4
5
6
7
8
9
10
11
@Test
public void testSelect(){
User user = new User();
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.le("age","20");
List<User> users = user.selectList(userQueryWrapper);

for (User user1 : users) {
System.out.println(user1);
}
}

新增

1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void testInsert(){
User user = new User();
user.setName("刘备");
user.setAge(30);
user.setPassword("123456");
user.setUserName("liubei");
user.setEmail("liubei@itcast.cn");

boolean insert = user.insert();

System.out.println(insert);
}

返回插入是否成功

更新

1
2
3
4
5
6
7
8
9
@Test
public void testUpdate(){
User user = new User();
user.setId(5L);
user.setAge(35);

boolean update = user.updateById();
System.out.println(update);
}

也可以根据条件(用Wrapper)更新

删除

1
2
3
4
5
6
@Test
public void testDelete() {
User user = new User(); user.setId(7L);
boolean delete = user.deleteById();
System.out.println(delete);
}