springboot初学总结

创建

springboot项目的创建与初始化可以直接用idea中给的springboot initialiar,在创建的时候勾上springweb组件就可以了,一键懒人式操作,各种依赖和启动类也都会默认给出。

但是这样会存在一个致命的问题,由于springboot是一种很新的架构,默认的版本都在3.0.0以上,其依赖的的jdk版本也都默认是17以上,而大多数情况下,这两个版本都高于实际应用,因此,经常不用这种方法来搭建springboot架构。

既然springboot也是一个maven项目,那就可以采用常规的maven搭建方法,先创建maven框架,然后是导入各种依赖,包括springboot版本、mybatis、mysql和fastjson等,最后手动添加一个启动类就可以了,这是启动类的常规写法和位置:

基本结构

一个基础的springboot项目包含controller层、service层、domain层和mapper层。其中

domain

这里一般是书写实体类的地方,用于各种封装、getter、setter和tostring。

controller

@RestController

controller层用于接收外界传入的信息,用RequestMapping、PostMapping、GetMapping处理不同的应用场景。对于传入的信息类型不同也有不同的接受方式。同时,为了调用service中的方法,还需要写一段小小的联系代码:

    @Autowired
    TestService testService;

Mapping注解

一、@RequestMapping注解

@RequestMapping是Spring MVC中用于映射web请求(如URL路径)到具体的方法上的注解。它既可以标注在类上,也可以标注在方法上。标注在类上时,表示类中的所有响应请求的方法都是以该类路径为父路径。

示例:

@RestController  
@RequestMapping("/users")  
public class UserController {  

	@GetMapping("/{id}")  
	public User getUserById(@PathVariable Long id) {  
		// ... 获取用户信息的逻辑  
		return user;  
	}  
}

在上述代码中,@RequestMapping("/users")注解表示该控制器处理所有以/users为前缀的URL请求。而@GetMapping("/{id}")则表示处理GET类型的请求,具体路径为/users/{id}。

二、@PostMapping注解

@PostMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.POST)的缩写。它用于处理HTTP POST请求的方法,只能标注在方法上。使用@PostMapping注解的方法将仅响应POST请求。

示例:

@RestController  
@RequestMapping("/users")  
public class UserController {  

	@PostMapping("/create")  
	public User createUser(@RequestBody User user) {  
		// ... 创建用户信息的逻辑  
		return createdUser;  
	}  
}

在上述代码中,@PostMapping("/create")表示该方法处理的是POST请求,路径为/users/create。通常用于创建新的资源。

三、@GetMapping注解

@GetMapping也是一个组合注解,它是@RequestMapping(method = RequestMethod.GET)的缩写。它用于处理HTTP GET请求的方法,也只能标注在方法上。使用@GetMapping注解的方法将仅响应GET请求。

示例:

@RestController  
@RequestMapping("/users")  
public class UserController {  

	@GetMapping("/list")  
	public List<User> listUsers() {  
		// ... 获取用户列表的逻辑  
		return userList;  
	}  
}

在上述代码中,@GetMapping("/list")表示该方法处理的是GET请求,路径为/users/list。通常用于获取资源列表。

四、@RequestMapping、@PostMapping、@GetMapping之间的区别

功能区别:

@RequestMapping是一个通用的请求映射注解,可以处理所有类型的HTTP请求。

@PostMapping和@GetMapping则分别是专门处理POST和GET请求的注解,它们具有更明确的语义。

使用场景:

当你需要处理多种类型的HTTP请求时,使用@RequestMapping是合适的。

当你只想处理POST请求时,应使用@PostMapping。

当你只想处理GET请求时,应使用@GetMapping。

代码简洁性:

使用@PostMapping和@GetMapping相比于@RequestMapping更加简洁明了,因为它们已经限定了请求的方法类型。

在实际的Spring Boot应用中,为了代码的可读性和维护性,建议根据具体需求选择使用这些注解。通常,对于简单的CRUD操作,使用@GetMapping、@PostMapping等特定类型的注解更为合适;而对于更复杂的请求处理逻辑,可以使用@RequestMapping并明确指定请求方法类型。

tips:一般来说,需要取得返回值的方法可以用GetMapping,不需要取得返回值的方法用PostMapping。

Request注解

一、@RequestParam 和 @RequestBody区别。

疑问: 在使用postman工具测试api接口的时候,如何使用 json 字符串传值呢,而不是使用 form-date,x-www-form-urlencoded 类型,毕竟通过 key-value 传值是有局限性的。假如我要测试批量插入数据的接口呢,使用 x-www-form-urlencoded 方法根本就不适用于这种场景。

那么如何通过postman工具使用json字符串传值呢,这里就引申出来了spring的两个注解:

@RequestParam

@RequestBoday

这两个注解都可以在后台接收参数,但是使用场景不用。

1、@RequestParam

先介绍一下@RequestParam的使用场景:

注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,比如常见的url:http://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完结,其在Controller 层的写法如下图所示:

@RequestParam有三个配置参数:

required 是否必须传递参数,默认为 true,必须。

defaultValue 可设置请求参数的默认值。

value 为接收url的参数名(相当于key值)。

**@RequestParam用来处理 Content-Type 为 multipart/form-data; 编码的内容,Content-Type默认为该属性。

@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。

这种使用表单格式multipart/form-data; 的请求

比如向表中插入单条数据,Controller 层的写法如下图所示:

由于@RequestParam是用来处理 Content-Type 为 application/form-data 编码的内容的

但是这样不支持批量插入数据啊,如果改用 json 字符串来传值的话,类型设置为 application/json,点击发送的话,会报错,后台接收不到值,为 null。

这时候,就可以使用@RequestBody

2、@RequestBody

先介绍一下@RequestBody的使用场景:

注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/form-data编码格式的数据,比如:application/json、application/xml、applicatioin/x-www-form-urlencoded等类型的数据。

就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。

1、 举个批量插入数据的例子,Controller层的写法如下图所示:

由于@RequestBody可用来处理 Content-Type 为 application/json 编码的内容,所以在postman中,选择body的类型为row -> JSON(application/json),这样在 Headers 中也会自动变为 Content-Type : application/json 编码格式。body内的数据如下图所示:

body 里面的 json 语句的 key 值要与后端实体类的属性一一对应。

**注意:**前端使用$.ajax的话,一定要指定 contentType: "application/json;charset=utf-8;",默认为 application/x-www-form-urlencoded。

2、后端解析json数据

上述示例是传递到实体类中的具体写法,那么如果传递到非实体类中,body里面的json数据需要怎么解析呢?我们再来看下面这个例子:

在body中,我们还是输入上面的json数据,根据分析,上面的json数据是一个List数组内嵌套着map对象,那么在后台的接收形式可写为 List>,具体代码如下图所示:

3、@RequestBody 还可以用于解析x-www-form-urlencoded请求参数

得出结论,通过@RequestBody可以解析Body中json格式的数据。

3、总结

注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,像POST、DELETE等其它类型的请求也可以使用。

注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/form-data编码格式的数据,比如:application/json、application/xml等类型的数据。通常用于接收POST、DELETE等类型的请求数据,GET类型也可以适用。

tips:一般来说,@RequestParam用于接收单一的、原始类型(string、int之类)的信息,@RequestBody用于接收封装类型或大量的数据;用@RequestParam时记得带上后面的括号内容。

service

@Service

这里是controller的下一层,用于实际处理controller中传入的数据,一般controller中的方法只负责接收或者对传入数据进行初步的加工,真正大量和复杂的操作应当在service中完成,同时,为了调用mapper接口,还需要写一段小小的联系代码:

    @Autowired
    StudentMapper studentMapperToMapper;

除此之外,这里倒是没有什么需要强调的地方,主要都是一些方法的书写。

mapper

@Mapper
@Repository

这里是service的下一层,用于连接service和mapper.xml,即连接代码操作和数据库操作,作接口用,这里通常只声明方法,真正的操作都交给与之相连的mapper.xml

mapper.xml

这里是真正操作数据库的地方,对于增删改查以及各种简单的数据操作有着独特的语法规范。一般来说,该文件开头如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

文件内部与html相似地使用双标签写法,最外层即为<mapper></mapper>。

内层主要功能部分大体分为增<insert></insert>、删<delete></delete>、改<update></update>、查<select></select>。

<mapper namespace="com.mapper.StudentMapper">
    <insert id="insert" parameterType="com.domain.Student" >
        insert into student(name,age) value (#{name},#{age})
    </insert>

    <select id="queryByName" resultType="com.domain.Student">
        select * from student where name = #{name}
    </select>

    <update id="update" parameterType="com.domain.Student">
        update student set age=#{age} where name = #{name}
    </update>

    <delete id="deleteByName">
        delete   from student where   name  = #{name};
    </delete>
</mapper>

其中的parameterType和resultType分别是传入数据类型和输出数据类型,这里因为传入传出的数据类型都是domain中封装的Student类,因此只用到了Student的路径地址,实际应用中通常还包含如下情况:

<select id="get2" parameterType="java.lang.String" resultType="com.xf.pojo.User">
       select * from t_user where name = #{name}
</select>

pom.xml

这是管理整个项目的依赖文件,用于提供各种<dependencies>、<properties>、和<build>。一般是需要什么以来的时候去搜索一下,要时刻注意版本问题,这里进行操作后记得去右侧maven处刷新一下

application.yml/application.properties

这是项目的配置文件,各种数据库、缓存、端口、组件等配置都是在这里完成。

需要说明的是,yml文件和properties文件的实际效益是一样的,只是格式不同。

.yml

spring:
  datasource:
  	url: jdbc:mysql://127.0.0.0:3306/要使用的数据库的库名?characterEncoding=utf8
 	username: root
  	password: 数据库的密码

.properties

# 设置MySQL的链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/要使用的数据库的库名?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=连接的数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

不难看出,yml文件的层次和条理更加清晰,因此目前大多数项目都是采用yml文件进行配置。需要注意的是,yml文件的冒号和后面的内容之间有一个空格,在idea中可以清晰地感觉出差异,有空格的时候整行才会高亮显示。

有时根据实际测试或生产的需要,会存在多个yml文件,命名格式一般如下:

根据需要在原yml文件中加入:

spring:
  profiles:
    active: prod

.gitignore

这是一份约束文件,在与远程gitee仓库建立联系后用于告知git哪些文件不参与commit和push。这里一般没有特殊要求的话可以通用,直接从其他项目copy一份即可。

需要注意的是,一般情况下直接从外部找.gitignore文件可能找不到,这时要在文件查看中打开隐藏项目显示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祈天泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值