SpringBoot

SpringBoot的HelloWorld

一、HelloWorl工程的搭建

本项目用到的开发工具时IDEA,java版本时1.8
1、新建项目

image
image
image
image

2、删除下面三个文件

image
查看pom文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.njupt</groupId>
<artifactId>girl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>girl</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project>
GirlApplication文件:
1
2
3
4
5
6
7
8
9
10
11
12
package com.njupt.girl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GirlApplication {

public static void main(String[] args) {
SpringApplication.run(GirlApplication.class, args);
}
}
GirlApplicationTest文件 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.njupt.girl;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class GirlApplicationTests {

@Test
public void contextLoads() {
}

}
3、启动项目:
    (1)、方法一

image

(2)、方法二:命令行启动方式:
进入项目目录girl
输入命令mvn spring-boot:run启动项目
(3)、方法三:命令行启动方式
进入项目目录girl下的target目录:
D:\girl\target>
查看目录几种的文件:

image

    输入命令:java -jar girl-0.0.1-SNAPSHOT.jar启动项目

4、新建一个Controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.njupt.girl;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author: XJL
* @Description:
* @Date: Create in 16:05 2018/6/26
* @Modified By:
**/
@RestController
public class HelloController {

@RequestMapping(value = "/say",method = RequestMethod.GET)
public String say(){
return "Hello SpringBoot!";
}

}
5、启动项目
6、浏览器输入:
http://localhost:8080/say

二、配置文件相关

1、在项目的resource目录下有一个application.properties文件:

image

2、修改改配置文件为如下内容:
1
2
server.port=8081
server.servlet.context-path=/girl
该配置文件作用:修改项目根目录和启动端口,此时应该用如下方式调用方法:
http://localhost:8081/girl/say

3、还可以使用yml文件代替.properties文件,新建application.yml文件,并删除application.properties:
1
2
3
4
server:
port: 8082
servlet:
context-path: /girl
启动项目,http://localhost:8082/girl/say


4、现在有如下需求,加入修改获得罩杯时B,年纪为22的女生,该如何配置呢:
(1)、首先配置文件application.yml:
1
2
3
4
server:
port: 8080
cupSize: B
age: 22
(2)、然后在controller中注入属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
public class HelloController {
@Value("${cupSize}")
private String cupSize;
@Value("${age}")
private Integer age;

@RequestMapping(value = "/say",method = RequestMethod.GET)
public String say(){
return cupSize+age;
}

}
(3)、启动运行即可。
5、如何在不同的环境下使用不同的配置文件呢?
(1)需要两个在不同版本下使用的配置文件:
application-dev.yml
application-prod.yml
然后在默认配置文件application.yml中如下配置:
1
2
3
spring:
profiles:
active: dev
表示使用application-dev.yml配置文件。 
6、如何在配置文件中使用配置呢:
(1)、修改配置文件:
1
2
3
4
5
server:
port: 8080
cupSize: B
age: 22
content: "cupSize: ${cupSize}, age: ${age}"
(2)、属性注入与调用:
1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class HelloController {

@Value("${content}")
private String content;

@RequestMapping(value = "/say",method = RequestMethod.GET)
public String say(){
return content;
}

}
7、但是有个问题,这样平凡的使用 @Value注解是很麻烦的一件事,如果配置文件中的女神属性多了怎么办?于是可以基于类的配置方式:
(1)、application.yml文件修改:
1
2
3
4
5
server:
port: 8080
girl:
cupSize: B
age: 22
(2)、新建一个GirlProperties的类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.njupt.girl;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
* @Author: XJL
* @Description:
* @Date: Create in 17:15 2018/6/26
* @Modified By:
**/
@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProprities {

private String cupSize;

private Integer age;

public String getCupSize() {
return cupSize;
}

public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}
注意添加注解:
@Component
@ConfigurationProperties(prefix = "girl")


(3)、然后在方法中利用@AutoWire注解注入:
1
2
3
4
5
6
7
8
9
@RestController
public class HelloController {
@Autowired
private GirlProprities girlProprities;
@RequestMapping(value = "/say", method = RequestMethod.GET)
public String say() {
return girlProprities.getCupSize();
}
}

三、Controller的使用

1、
@Controller:处理Http请求
@RestController:Spring4之后新增加的注解,原来返回json数据需要@ResponseBody配合@Controller使用
@RequestMapping:配置url映射。

2、
可以用@GetMapping(value = "say")代替@RequestMapping(value = "/say", method = RequestMethod.GET),其他如POST同理
3、其他如@PathVariable,@RequestParam等注解的使用与springMVC相同。

四、数据库操作

要求完成一下的api:

image

1、在pom文件中添加依赖:
1
2
3
4
5
6
7
8
9
10
11

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>

</dependency>
2、新建类Girl,对应数据库中的表,其中@Entity表示该类对应数据库中的表,@ID表示该字段为主键,@GeneratedValue表示主键自增:
1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;

private String name;

private String cupSize;

public Girl() {
}
}
3、配置文件:
由于数据库的配置应该是全局的,所以配置在appliaction.yml文件中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
spring:
profiles:
active: dev
#数据库的配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/dbgirl

jpa:
show-sql: true#表示在后台显示sql语句
hibernate:
ddl-auto: update #表示启动项目时当数据库代dbgirl中没有表时新建一张girl表,如果表中有数据则更新表,还有create:表示每次启动都会新建表
4、新建一个接口并继承JpaRepository,各个接口如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.njupt.girl;

import org.springframework.data.jpa.repository.JpaRepository;

/**
* @Author: XJL
* @Description:
* @Date: Create in 20:33 2018/6/26
* @Modified By:
**/
public interface GirlRepository extends JpaRepository<Girl,Integer> {
List<Girl> findByName(String name);
}
4、新建一个GirlController:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
@RestController
public class GirlController {

@Autowired
private GirlRepository girlRepository;

/**
* 获取女生列表
* @return
*/
@GetMapping(value = "/girls")
public List<Girl> getGirlList() {
List<Girl> girls = girlRepository.findAll();

return girls;
}

/**
* 新增一个女生
* @param name
* @param cupSize
* @return
*/
@PostMapping(value = "/girls")
public Girl addGirl(@RequestParam("name") String name,@RequestParam("cupSize") String cupSize){
Girl girl = new Girl();
girl.setCupSize(cupSize);
girl.setName(name);
return girlRepository.save(girl);
}
//
// /**
// * 根据Id获取一个女生
// * @param id
// * @return
// */
// @GetMapping(value = "/girls/{id}")
// public Girl getOneGirl(@PathVariable("id") Integer id){
// return girlRepository.getOne(id);
// }

/**
* 更新一个女生
* @param id
* @param name
* @param cupSize
* @return
*/
@PutMapping(value = "/girls/{id}")
public Girl updateGirlById(@PathVariable("id") Integer id,
@RequestParam("name") String name,
@RequestParam("cupSize") String cupSize) {
Girl girl = new Girl();
girl.setName(name);
girl.setId(id);
girl.setCupSize(cupSize);
return girlRepository.save(girl);
}

/**
* 删除一个女生
* @param id
*/
@DeleteMapping(value = "/girls/{id}")
public void deleteGirl(@PathVariable("id") Integer id){
girlRepository.deleteById(id);
}

/**
* 根据命中获取女生
*/
@GetMapping(value = "/girls/{name}")
public List<Girl> getGirlsBYName(@PathVariable("name") String name){
return girlRepository.findByName(name);
}

}

五、事务管理

要求:插入两条女生数据,要么都成功,要么都失败

1、新建一个GirlService,在方法上加注解: @Transactional
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Service
public class GirlService {

@Autowired
private GirlRepository girlRepository;

@Transactional
public void insertGirls(){
Girl girla = new Girl();
girla.setCupSize("E");
girla.setName("G");
girlRepository.save(girla);

Girl girlb = new Girl();
girlb.setName("AAAAAA");
girlb.setCupSize("c");

girlRepository.save(girlb);
}
}
2、controller中新增方法:
1
2
3
4
@PostMapping(value = "/girls/add")
public void insertGirls(){
girlService.insertGirls();
}
此时该方法就用事务了。
文章目录
  1. 1. 一、HelloWorl工程的搭建
  2. 2. 二、配置文件相关
  3. 3. 三、Controller的使用
  4. 4. 四、数据库操作
  5. 5. 五、事务管理