前言
写这个是为了记录自己入门学习SpringBoot框架的入门文章,并没有看源码之类的,哪些后面再看。
学习SpringBoot框架总计用了9个小时。
学会了基础的使用和redis,mysql的配置使用。
还有记录遇到的坑之类的
参数及注释和坑
入口参数
@SpringBootApplication(scanBasePackages = "com.example")
// 引用mybatis plus 同时扫描mapper包
@MapperScan("com.example.springbootlearn.mapper")
这两个注释我通常放在入口处。
SpringBootApplication 内的扫描包,可以自动扫描里面的组件及其他
MapperScan则是扫描mapper,则不需要继承的函数使用@Mapper的重复注释
关于网址请求
@RestController
这个是路由的控制层,是@Controller @ResponseBody合并一起的简易方式
@GetMapping("/get/{id}/test/{name}")
public Map<String, Object> GetPathController(
@PathVariable("id") Integer id,
@PathVariable Map<String, String> PathMap,
@RequestHeader("User-Agent") String Agent,
@RequestHeader Map<String, String> HeaderMap,
@RequestParam("age") Integer age,
@RequestParam Map<String, String> ParamMap,
@CookieValue("test") String test
) {
@PathVariable 获取请求路径对应的值
还可以使用Map接收传来的说有值,如Map<String,String>
@RequestHeader 获取请求的头部参数,User-Agent 表示获取请求的浏览器标识
还可以使用Map接收传来的说有值,如Map<String,String>
@RequestParam 获取请求的Param值,如Get的/get/test?age=10&name="Test"
@CookieValue 获取请求的Cookie值
@RequestAttribute 获取域属性
@RequestBody 获取post请求的Json值 会自动序列化
其中的GetMapping则是网址请求的简易写法,PostMapping则是Post请求的写法。
@RequestMapping(value = "Name", method = RequestMethod.POST)
关于网址响应
@ResponseBody // 响应body
则需要在方法上加上这个注释,我们想要响应xml和json形式则是需要导入两个插件库
// 引用响应json库
implementation 'org.springframework.boot:spring-boot-starter-json'
// 引用响应xml库
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
SpringBoot会自动根据accpet的请求来自动判断返回xml还是json数据,其中需要开启配置。
# accept
spring.mvc.contentnegotiation.favor-parameter=true
自定义组件
@Component
使用这个注释就完事,同时还可以自定义话,往里面加指定的类就行
@Import({AsyncAppender.class})
@Bean("PetConfig")
这个注释则是声明容器组建的指定ID,相当于名字。
还有一种过滤参数:
// 设置当容器中有该组件,此配置类代码才生效,进行组件注入,,谈过没有指定组件,注释下面的代码全部无法使用
// 如:此配置类没有PetConfig的组件,则MyConfig全部无法使用,若在方法前面加上该注释,没有满足条件则会该方法无法使用
@ConditionalOnBean(name = "PetConfig")
当我们需要判断其中的组件是否使用,或者查看使用哪些组件,可以在SpringBoot的入口处查看:
// ConfigurableApplicationContext run = SpringApplication.run(SpringBootLearnApplication.class, args);
// 查看框架使用的组件
// String[] GetSpringBootName = run.getBeanDefinitionNames();
// for (String Name : GetSpringBootName) {
// System.out.println(Name);
// }
// // 获取指定组件
// Pet pet = run.getBean("PetConfig", Pet.class);
// System.out.println(pet);
// 获取容器中有没有指定组件
// boolean Pet = run.containsBean("PetConfig");
// System.out.println(Pet);
如何自定义读取配置yaml
// 获取配置文件信息,由于是有前缀的形式,所以需要使用此函数
@PropertySource(value = "classpath:application.yaml")
@ConfigurationProperties(prefix = "database")
// 使用注解自行注入setter和getter 方法,虽然可以自动生成,但是还是可以用lombok方法
@Data
这里表示的注释在yaml的表示为:
@Data 是lombok库的方法,这个库更多的是提供private变量的setter和getter方法,自动生成
// lombok 简易开发库 自动注入就用 annotationProcessor导入
annotationProcessor 'org.projectlombok:lombok'
// 同时导入build时的包
compileOnly 'org.projectlombok:lombok'
如何使用mybatis plus
定义一个包含数据表参数的类
@Data public class User { private Long id; private String name; private Integer age; private String email; }
使用接口继承mybatis plus的类
@Component public interface UserMapper extends BaseMapper<User> { }
需要使用的库的配置:
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
// 使用数据库管理池 阿里的,又一个kpl项目 需要指定版本
// implementation 'com.alibaba:druid:1.2.15' 使用spring框架官方版
implementation 'com.alibaba:druid-spring-boot-starter:1.2.15'
// 引用java mysql 驱动
implementation 'mysql:mysql-connector-java'
// 引用mybatis
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.1'
// 引用mybatis-plus https://baomidou.com/pages/24112f/#%E6%94%AF%E6%8C%81%E6%95%B0%E6%8D%AE%E5%BA%93
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.3.1'
之所以展示出来配置,是因为部分情况可能找错包,这里对应一下。
想要使用SpringBoot和Mybatis plus的测试包,配置则是需要写入:
// 引用SpringBoot测试库
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 引用mybatis plus 测试库
testImplementation 'com.baomidou:mybatis-plus-boot-starter-test:3.5.3.1'
这样差不多就入门了,剩下的我去看项目源码。
测试注解
/*
测试常用注解
● @Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
● @ParameterizedTest :表示方法是参数化测试,下方会有详细介绍
● @RepeatedTest :表示方法可重复执行,下方会有详细介绍
● @DisplayName :为测试类或者测试方法设置展示名称
● @BeforeEach :表示在每个单元测试之前执行
● @AfterEach :表示在每个单元测试之后执行
● @BeforeAll :表示在所有单元测试之前执行
● @AfterAll :表示在所有单元测试之后执行
● @Tag :表示单元测试类别,类似于JUnit4中的@Categories
● @Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
● @Timeout :表示测试方法运行如果超过了指定时间将会返回错误
● @ExtendWith :为测试类或测试方法提供扩展类引用
*/
// 可通过assertions类进行断言
/*
往测试里面注入参数
@ValueSource: 为参数化测试指定入参来源,支持八大基础类以及String类型,Class类型
@NullSource: 表示为参数化测试提供一个null的入参
@EnumSource: 表示为参数化测试提供一个枚举入参
@CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参
@MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流)
*/
// 使用测试
4 条评论
测试评论test
再次测试邮件通知
玉哥还让不让人活了
大佬,我老菜了