SpringBoot学习日记(一)开始

本文详细介绍了使用Spring Initializr初始化Spring Boot项目的过程,包括创建DAO层、Repository层及Controller层的具体步骤。并通过实战演示了如何利用Postman进行API调试,以及如何配置路由函数实现异步处理,提高应用吞吐量。

跟着教程,在spring initializr上面建了一demo。

Spring initializr 是Spring 官方提供的一个很好的工具,用来初始化一个Spring boot 的项目。

建完以后发现结构是这样子的,跟东哥的sunrise是有相似的结构,他应该也是通过这个初始化的项目,我个人理解是通过这个来选择你想要的组件他会自动帮你下载好相应的jar包。

写了一个dao层:user类

idea中生成set get方法的快捷键是alt+insert。

新建一个Repository包(仓储):具体这个层有什么用还不是很清楚,待补充。

@Repository:用于标注数据访问组件,即DAO组件。

@link:javadoc文档,可以把你的写的注释生成api文件,这个link就可以连接到你想要链接的文件里面去,譬如这里是链接到User这个model里面。

controller层:

package com.kim.firstappdemo.controller;

import com.kim.firstappdemo.domain.User;
import com.kim.firstappdemo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    private final UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository){
        this.userRepository = userRepository;
    }

    @PostMapping("/person/save")
    public User save(@RequestParam String name){
        User user = new User();
        user.setName(name);
        if(userRepository.save(user)){
            System.out.printf("用户对象: % 保存成功!\n",user);
        }
        return  user;
    }
}
复制代码

然后Debug

这里打了断点:

因为写的是post请求,之前我想起来我写ssm,用的都是ajax来发送post请求,这里不用麻烦,下载了一个软件:postman。

把url写进去,然后设置是post,然后设置params,send就能发送请求。

debug没有问题。

新建config包 新建RouteFunctionConfiguration:

从名字上来看,这是路由方法配置,应该跟我之前写过得路由配置差不多。

package com.kim.firstappdemo.config;

import com.kim.firstappdemo.domain.User;
import com.kim.firstappdemo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Flux;

import java.util.Collection;

/**
 * 路由器函数 设置
 */

@Configuration
public class RouteFunctionConfiguration {

    /**
     * Servlet
     *  请求接口:ServletRequest 或者 HttpServletRequest
     *  响应接口:ServletRequest 或者 HttpServletRequest
     * Spring 5.0 重新定义了服务请求和响应接口
     * 即可支持 Servlet 规范,也可以支持自定义 比如 Netty (Web Server)
     * 以本例:
     * 定义 GET 请求,并且返回所有用户对象  URI :/person/find/all
     *
     * Flux 是 0 - N 个对象的集合
     * Mono 是 0 - 1 个对象的集合
     * Reactive 中的 Flux 或者 Mono 他是异步处理(非阻塞)
     * 集合对象基本上是同步处理(阻塞)
     * Flux 或则 Mono 都是 Publisher(发布者)
     */

    @Bean
    @Autowired
    public RouterFunction<ServerResponse> personFindAll(UserRepository userRepository){
        return RouterFunctions.route(RequestPredicates.GET("/person/find/all"),
                serverRequest -> {
                    // 返回所有用户对象
                    Collection<User> users = userRepository.findAll();
                    Flux<User> userFlux = Flux.fromIterable(users);
                    return ServerResponse.ok().body(userFlux,User.class);
                });
    }
}

复制代码

调用仓储repository里面的findAll方法放在一个collection集合里面,通过迭代方法放进Flux集合里面,然后再返回。

.ok()就是有数据是返回的一个状态

然后开debug,用postman发请求:

返回的结果没有问题。

用Reactive实现的好处:是异步处理,增大吞吐量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值