「SpringBoot-Service」 Service层介绍

Posted by Dawn-K's Blog on July 3, 2020

Service层介绍

[toc]

和DAO的区别

数据层单纯的操作数据库 业务层将业务逻辑转化成代码

举例:

注册 登录
DAO 单纯加入数据库 查询是否存在
Service 账号不允许重复 超过五次禁止登陆

书写方式

在实体类的基础上, 创建业务接口类, 然后创建业务类实现接口类的方法(和DAO的单元测试类似, 不过是可以有返回值和参数的). 最后对业务类创建单元测试类进行测试.

实体类 -> 接口类 -> 业务类 -> 单元测试 注: 此处反复利用了DAO层的 UserMapper 类来封装底层结构

实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
// 实体类,在之前的基础上改成了MP模式,书写更加简单那
// com.neuedu/entity/User.java
@TableName("user")
@Data
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String username;
    private String password;
    private String birthday;
    private String sex;
    private String address;
}

接口类

1
2
3
4
5
6
7
8
9
10
11
// 定义业务方法
// com.neuedu/service/UserService.java
public interface UserService {
    //    boolean login(String username,String pwd);
    boolean login(User user);

    //    参数封装为对象之后,如果在user加字段,就可以直接改变,不需要改变参数
    boolean register(User user);

}

业务类

1
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
38
39
40
41
42
43
44
45
46
47
48
// com.neuedu/service/impl/UserServiceImpl/UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    public HashMap<String, Integer> userLoginCount = new HashMap<>();

    @Override
    public boolean login(User user) {
        QueryWrapper queryWrapper = new QueryWrapper();
        String userName = user.getUsername();
        queryWrapper.eq("username", userName);
        List<User> list = userMapper.selectList(queryWrapper);
        if (list.size() > 0) {
            String password = list.get(0).getPassword();
            if (password.equals(user.getPassword())) {
                return true;
            } else {
                int count = 0;
                if (userLoginCount.containsKey(userName)) {
                    count = userLoginCount.get(userName);
                }
                if (count >= 5) {
                    return false;
                } else {
                    userLoginCount.put(userName, count + 1);
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    public boolean register(User user) {
//        先查询,再插入
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("username", user.getUsername());
        List<User> list = userMapper.selectList(queryWrapper);
        if (list.size() > 0) {
            return false;
        }
        userMapper.insert(user);
        return true;
    }

}

单元测试

1
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
38
39
40
41
42
43
44
45
46
47
48
49
// com.neuedu/service/impl/UserServiceImplTest.java
@SpringBootTest
@Slf4j
class UserServiceImplTest {
    @Autowired
    private UserService userService;

    @Autowired
    private PaginationInterceptor paginationInterceptor;

    @Test
    void testConfig() {
        Assert.assertNotNull(paginationInterceptor);
    }

    @Test
    void login() {
        log.info(userService + "");
        User user = new User();
        user.setUsername("张三");
        boolean bool = userService.login(user);
        Assert.assertTrue(bool);
    }

    @Test
    void login6times() {
        for (int i = 0; i < 6; ++i) {
            log.info(userService + "");
            User user = new User();
            user.setUsername("张三");
            boolean bool = userService.login(user);
            log.info(i + " " + bool);
            if (i == 5) {
                Assert.assertFalse(bool);
            }
        }

    }

    @Test
    void register() {
        log.info(userService + "");
        User user = new User();
        user.setUsername("zhangsan");
        boolean bool = userService.register(user);
//        检查返回值
        Assert.assertTrue(bool);
    }
}