乐趣区

SpringBoot-入门02-实现-MVC

在上一篇中,咱们曾经创立了实体类以及映射接口,接下来要做的就是实现解决业务逻辑的 Service 层、管制流程的 Controller 层。

创立业务逻辑层

在我的项目中创立 service 目录,新建 UserService.java 文件:

package com.foxescap.wxbox.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.foxescap.wxbox.mapper.UserMapper;
import com.foxescap.wxbox.model.User;
import org.springframework.stereotype.Service;

/**
 * @author imxfly
 */
@Service
public class UserService extends ServiceImpl<UserMapper, User> {

    /**
     * 依据用户名获取单个用户
     * @param username 用户名
     * @return 用户
     */
    public User findByUsername(String username) {return lambdaQuery().eq(User::getUsername, username).one();}
}

以上是依据用户名获取单个用户的一个逻辑,有几点阐明一下:
• 通过增加 Spring 官网的 @Service 注解主动将该类注入到 Spring 容器中

• 通过继承 MyBatis-Plus 依赖提供的 ServiceImpl<UserMapper, User> 类,就能够很不便的应用它的 query、lambdaQuery 等办法进行链式操作,而不许进行 MyBatis 的 XML 繁琐配置,这就是进步开发效率最大的中央

创立管制流程层

在我的项目中创立 controller 目录,新建 UserController.java 文件:

package com.foxescap.wxbox.controller;

import com.foxescap.wxbox.model.User;
import com.foxescap.wxbox.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author imxfly
 */
@RestController
public class UserController {

    //@Autowired
    //private UserService userService;
    
    private final UserService userService;

    public UserController(UserService userService) {this.userService = userService;}

    /**
     * 依据用户名获取用户
     * @param username 用户名
     * @return 用户
     */
    @GetMapping("/user")
    public User findUserByUsername(@RequestParam(name = "username") String username) {return userService.findByUsername(username);
    }
}

• 通过 Spring 官网提供的 @RestController 注解主动注入到 Spring 容器中,并且会将返回值放在 Response 体内,而不是返回一个页面。

• 很多人都习惯用 @Autowired 注解来主动注入以后类的实例,然而我集体习惯用构造函数的形式来实现。放弃业务逻辑免受 Spring Boot 代码侵入的一种办法是应用构造函数注入。不仅是因为 @Autowired 注解在构造函数上是可选的,而且还能够在没有 Spring 的状况下轻松实例化 Bean,其余优缺点能够去浏览一下上面的参考链接里的第一条。

• 通过 Spring 官网提供的 @GetMapping 注解实现路由的创立。

• 通过 Spring 官网提供的 @RequestParam 注解实现申请参数的绑定。

运行测试

运行起来后,如果没有配置端口,默认是起的 8080,为了能看到有数据,咱们在数据库插一条:

INSERT INTO `wxbox`.`user`(`id`, `username`, `secret_key`, `expired_at`, `created_at`) VALUES (1, 'steve', 'xxx', '2020-08-28 00:05:40', '2020-07-07 00:05:47');

而后通过 curl 命令看下:

$ curl http://localhost:8080/user\?username\=steve
{"id":1,"username":"steve","secretKey":"xxx","expiredAt":"2020-08-28T00:05:40","createdAt":"2020-07-07T00:05:47"}

参考链接

• Field injection is not recommended – Spring IOC

退出移动版