在上一篇中,我们已经创建了实体类以及映射接口,接下来要做的就是实现处理业务逻辑的 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"}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。