在上一篇中,咱们曾经创立了实体类以及映射接口,接下来要做的就是实现解决业务逻辑的 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