Spring Boot 实战篇(三):构建基础控制器与服务层

目录

Spring Boot 实战篇(三):构建基础控制器与服务层

一、创建基础控制器(Controller)

(一)定义控制器类

(二)添加请求处理方法

二、创建基础服务层(Service)接口和实现类

(一)定义服务层接口

(二)创建服务层实现类

(三)处理业务逻辑(可扩展)


在完成项目的基础搭建后,接下来需要构建基础的控制器(Controller)与服务层(Service),以实现业务逻辑的初步处理和与前端的交互。以下将详细介绍具体步骤及代码示例。

一、创建基础控制器(Controller)

(一)定义控制器类

  1. 创建包和类
    • 在项目的com.example.myproject.controller包下(假设项目包名为com.example.myproject)创建一个名为UserController的控制器类,用于处理与用户相关的请求。
  2. 添加注解和依赖注入
    • 使用@RestController注解标识该类为一个 RESTful 风格的控制器,它结合了@Controller@ResponseBody的功能,意味着控制器中的方法返回值将直接作为响应体返回给客户端,而不是解析为视图名。
    • 使用@Autowired注解注入服务层接口(假设已经创建了UserService接口),以便在控制器中调用服务层的方法来处理业务逻辑。
    • 代码示例:
package com.example.myproject.controller;

import com.example.myproject.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;
}

(二)添加请求处理方法

  1. 查询用户列表方法
    • UserController中添加一个方法用于查询用户列表。使用@GetMapping注解标识该方法处理 HTTP GET 请求,请求路径为/users
    • 在方法中调用服务层的getAllUsers方法(假设UserService中有此方法)获取用户列表,并将结果返回给前端。
    • 代码示例:
import com.example.myproject.entity.User;
import com.example.myproject.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getAllUsers();
    }
}

  1. 根据 ID 查询用户方法(可选)
    • 可以添加一个根据用户 ID 查询用户的方法。使用@GetMapping注解,请求路径为/users/{id},其中{id}是路径变量。
    • 使用@PathVariable注解获取路径变量的值,并将其传递给服务层的getUserById方法(假设UserService中有此方法)。
    • 代码示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    return userService.getUserById(id);
}

二、创建基础服务层(Service)接口和实现类

(一)定义服务层接口

  1. 创建接口
    • com.example.myproject.service包下创建UserService接口,用于定义与用户相关的业务逻辑方法。
  2. 声明方法签名
    • 例如,声明getAllUsers方法用于获取所有用户列表,getUserById方法用于根据用户 ID 获取用户信息。
    • 代码示例:
package com.example.myproject.service;

import com.example.myproject.entity.User;
import java.util.List;

public interface UserService {
    List<User> getAllUsers();
    User getUserById(Long id);
}

(二)创建服务层实现类

  1. 实现接口
    • com.example.myproject.service.impl包下创建UserServiceImpl类,实现UserService接口。
  2. 注入数据访问层接口(DAO)
    • 使用@Autowired注解注入UserDao接口(假设已经创建了UserDao用于数据访问),以便在服务层中调用数据访问层的方法与数据库交互。
  3. 实现接口方法
    • getAllUsers方法中,调用UserDaofindAll方法获取用户列表并返回。
    • getUserById方法中,调用UserDaofindById方法根据 ID 获取用户信息并返回。
    • 代码示例:
package com.example.myproject.service.impl;

import com.example.myproject.dao.UserDao;
import com.example.myproject.entity.User;
import com.example.myproject.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public List<User> getAllUsers() {
        return userDao.findAll();
    }

    @Override
    public User getUserById(Long id) {
        return userDao.findById(id);
    }
}

(三)处理业务逻辑(可扩展)

  1. 添加业务逻辑验证(示例)
    • getUserById方法中,可以添加一些业务逻辑验证,例如判断用户 ID 是否合法(大于 0)。如果不合法,可以抛出一个自定义的异常(假设创建了InvalidUserIdException异常类)。
    • 代码示例:
@Override
public User getUserById(Long id) {
    if (id <= 0) {
        throw new InvalidUserIdException("无效的用户ID");
    }
    return userDao.findById(id);
}

  1. 事务管理(如果涉及数据库事务操作)
    • 如果在服务层方法中存在多个数据库操作,且这些操作需要在一个事务中执行,可以使用 Spring 的事务管理功能。在服务层实现类或方法上添加@Transactional注解来开启事务支持。例如,如果有一个用户注册方法涉及插入用户信息和更新相关统计信息两个数据库操作,可以这样实现:
@Transactional
public void registerUser(User user) {
    userDao.insert(user);
    // 假设还有一个统计信息表,更新注册用户数量
    statisticsDao.incrementRegisteredUserCount();
}

通过以上步骤,我们构建了基础的控制器和服务层,实现了简单的用户数据查询功能,并可以在此基础上进一步扩展和完善业务逻辑,如添加用户注册、登录、更新等功能,以及处理更复杂的业务规则和数据验证。同时,合理的服务层设计有助于提高代码的可维护性和可扩展性,将业务逻辑与数据访问和控制器分离,便于项目的开发和维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值