持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
前言
在先的文章中我们编写了getAllUsers()方法来查询所有的用户信息,今天我们继续RESTful API接口的开发,以熟悉上手为目的。
通过用户名来查询指定用户
有了一次性获取到所有用户数据,通过用户名来获取到相对应的用户这种精细化查询也是必须的。
简单的将实现步骤分为五个步骤,分别是:
//1. 在Service.java中定义好我们的方法
UserBean getUserByName(String name);
//2
UserBean getUserByName(String name);
//3
<select id="getUserByName" parameterType="String" resultType="com.jc.test.bean.UserBean">
SELECT * FROM user WHERE name = #{name}
</select>
//4
@Override
public UserBean getUserByName(String name) {
return userMapper.getUserByName(name);
}
//5
@GetMapping("/users/{name}")
public UserBean getUserByName(@PathVariable String name) {
return userService.getUserByName(name);
}
- 在
UserService.java中定义好我们的方法。 - 在
UserMapper.java中定义好数据查询的方法。 - 在
UserMapper.xml中编写好具体的SQL语句。 - 在
UserServiceImpl.java中具体实现在UserService.java中定义的方法,也就是调用Mapper中的方法。 - 在
UserController.java中添加指定方法,方便调用。
在TestApplicationTests.java 中编写测试用例来验证代码是否正确。
System.out.println("************* test UserController.getUserByName() ***************");
UserBean liUb = userService.getUserByName("li");
System.out.println("liUb : " + liUb.getName() + " " + liUb.getPassword());
System.out.println("************ test tom ********");
UserBean tomUb = userService.getUserByName("tom");
System.out.println("tomUb : " + tomUb.getName() + " " + tomUb.getPassword());
System.out.println("************ test mike ********");
UserBean mikeUb = userService.getUserByName("mike");
if (mikeUb != null) {
System.out.println("mikeUb : " + mikeUb.getName() + " " + mikeUb.getPassword());
} else {
System.out.println("mikeUb is null");
}
运行 TestApplicationTests.java ,查看输出的日志。
************* test UserController.getUserByName() ***************
liUb : li 123456
************ test tom ********
tomUb : tom 666888a
************ test mike ********
mikeUb is null
接着我们运行项目,然后再Postman中进行调试。
查询当前用户的年龄
接着我们再接再厉再来一个查询实操。
在我们的数据库 user表 中有 age 这个字段。
但是在我们定义的 UserBean 中是没有 age 这个字段的。
public class UserBean {
private intid;
privateStringname;
privateStringpassword;
......
}
那么问题来了?
我该如何根据用户名来查询到他的年龄呢?
由于我们的 UserBean 中是没有 age 这个字段的,所以显然我们不可以通过先查询到用户,再读取用户的年龄这个方法来得到年龄。解决办法呢,给 UserBean 添加上 age 这个字段,或者直接用过SQL语句来查询到年龄。
例如:
select age from user where name = "li";
具体代码及步骤如下:
//1.
int getAgeByName(String name);
//2
@Override
public int getAgeByName(String name) {
return userMapper.getAgeByName(name);
}
//3
int getAgeByName(String name);
//4
<select id="getAgeByName" parameterType="String" resultType="int">
SELECT age FROM user WHERE name = #{name}
</select>
//5
/**
* 查询该用户的实际年龄。
* SQL表中是有年龄字段的,但是我们自己定义的UserBean中是没有age字段的,所以我们需要直接通过SQL语句来查询
* select age from user where name = "li";
* @param name
*/
@GetMapping("/users/age/{name}")
public int getAgeByName(@PathVariable String name) {
return userService.getAgeByName(name);
}
同样编写测试用例测试一下代码。
@Test
void contextLoads() {
System.out.println("************* test UserController.getAgeByName() ***************");
System.out.println("li age = " + userService.getAgeByName("li"));
System.out.println("stephen age = " + userService.getAgeByName("stephen"));
}
运行 TestApplicationTests.java ,查看输出的日志。
************* test UserController.getAgeByName() ***************
li age = 18
stephen age = 27
接着我们运行项目,然后再Postman中进行调试。
总结
今天还是以查询为主题,根据指定用户名来查询用户以及在UserBean没有age字段的前提下根据指定用户名来查询到该用户的年龄,进一步熟悉了利用SpringBoot框架来开发API。