# MyBatis-Plus教程 - 5 Service增删改查
在前面讲解了通过让 Mapper 继承 com.baomidou.mybatisplus.core.mapper.BaseMapper
接口,就可以继承很多方法,不用我们编写Mapper 方法。
在 HelloWorld 中也看到,通过 controller 调用 service,通过 service 调用 mapper,service 很多的方法就是调用 mapper 而已,可能没有特别的逻辑,所以 MyBatis-Plus 针对 Service 也提供了基础的功能,我们甚至不用编写 Service 中的方法,直接继承 MyBatis-Plus 提供的父类即可。
# 5.1 Service实现
下面看看如何使用 MyBatis-Plus 提供的 Service ,不用写 Service 方法,就能实现增删改查。
# 1 修改Service
修改 HelloWorld 中的 Service,需要修改 Service 接口和具体的实现类 。
修改 IUserService.java 接口,实现 IService 接口(MyBatis-Plus提供的):
package com.foooor.helloplus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.foooor.helloplus.pojo.User;
public interface IUserService extends IService<User> {
}
2
3
4
5
6
7
8
接口中不需要有接口方法,接口方法是继承自 IService 的。
修改 UserServiceImpl 实现类,继承 ServiceImpl
(MyBatis-Plus提供的),添加泛型:
package com.foooor.helloplus.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.foooor.helloplus.service.IUserService;
import com.foooor.helloplus.mapper.UserMapper;
import com.foooor.helloplus.pojo.User;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
2
3
4
5
6
7
8
9
10
11
12
13
实现类中也不需要提供方法,ServiceImpl 中提供了方法。需要添加 Mapper 和实体类的泛型支持。
# 2 修改Controller
因为 Service 中没有方法,调用的是 IService
接口提供的方法,所以得按照 IService
提供的方法来调用。
UserController.java
:
package com.foooor.helloplus.controller;
import com.foooor.helloplus.pojo.User;
import com.foooor.helloplus.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
/**
* 获取所有用户信息
*/
@GetMapping("/all")
public List<User> selectAll() {
return userService.list();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
IService
中提供的查询列表的方法是 list()
,所以这里调用的是 userService.list()
。
运行项目,访问 Controller 中的接口,还是可以获取到 User 表的全部数据。
下面看一下通过 IService
和 ServiceImpl
如何实现数据的增删改查。也就是看看 ServiceImpl
中提供的方法。
为了测试方便,还是在测试类中注入 UserServiceImpl
并调用。当然 UserServiceImpl
中是没有代码的。
# 5.2 插入数据
编写测试类,并编写测试方法。
插入用户数据:
package com.foooor.helloplus;
import com.foooor.helloplus.pojo.User;
import com.foooor.helloplus.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
@Slf4j
@SpringBootTest
public class ServiceTests {
@Autowired
private IUserService userService;
/**
* 测试插入用户
*/
@Test
void testInsertUser() {
User user = new User();
user.setUsername("foooor");
user.setAge(13);
user.setEmail("foooor@foooor.com");
Date currentDate = new Date();
user.setCreateTime(currentDate);
user.setUpdateTime(currentDate);
boolean result = userService.save(user);
log.info("插入用户结果:{}", result);
log.info("插入用户:{}", user.getId());
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
调用 save()
方法插入数据,返回的结果是 boolean
类型。插入完成,可以获取到数据的主键ID。
和之前的 BaseMapper 中的方法名和返回值不一样而已。
# 5.3 修改数据
修改用户数据:
@Test
void testUpdateUser() {
Long id = 2L;
User user = new User();
user.setId(id);
user.setUsername("张三");
user.setAge(12);
user.setUpdateTime(new Date());
// 通过ID修改用户信息
boolean result = userService.updateById(user);
log.info("修改用户结果:{}", result);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
上面根据 ID 修改用户信息,将要修改的值封装在 User 对象中,只会修改属性不为空的值。
# 5.4 查询数据
查询用户数据:
@Test
void testSelectUserById() {
Long id = 2L;
User user = userService.getById(id);
log.info("查询用户:{}", user);
}
2
3
4
5
6
上面根据 ID 查询用户。
# 5.5 删除数据
删除用户数据:
@Test
void testDeleteUser() {
Long id = 2L;
boolean result = userService.removeById(id);
log.info("删除用户结果:{}", result);
}
2
3
4
5
6
上面根据 ID 删除用户。
操作都是非常的简单,通过 IService
和 ServiceImpl
提供的方法,可以简化我们 Service 的开发, Service 中提供了很多的增删改查的方法,可以根据自己的需求进行调用。
如果 ServiceImpl
中提供的方法无法满足你的要求,你可以自己实现 Service 方法,并调用 Mapper 接口提供的功能。