前端同学学习SpringBoot的第 5 天

159 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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);
}
  1. UserService.java 中定义好我们的方法。
  2. UserMapper.java 中定义好数据查询的方法。
  3. UserMapper.xml 中编写好具体的SQL语句。
  4. UserServiceImpl.java 中具体实现在UserService.java 中定义的方法,也就是调用Mapper中的方法。
  5. 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中进行调试。

利用用户名查询.png

查询当前用户的年龄

接着我们再接再厉再来一个查询实操。

在我们的数据库 user表 中有 age 这个字段。

user-mysql.png

但是在我们定义的 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中进行调试。

截屏2022-06-21 下午3.17.12.png

总结

今天还是以查询为主题,根据指定用户名来查询用户以及在UserBean没有age字段的前提下根据指定用户名来查询到该用户的年龄,进一步熟悉了利用SpringBoot框架来开发API。