eclipse下第一个spring-boot
2018-01-22 本文已影响810人
liangxifeng833
eclipse下创建spring-boot参考文章http://blog.csdn.net/clementad/article/details/51334064
-
按着以上文章创建好后, 目录结构如下:
image.png - 以上HelloController.java是自己创建的内容是:
package com.lxf;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String say()
{
return "spring boot hello world";
}
}
- 在MyfirstSpringBootApplication文件中main方法右键->run as -> Spring Boot App,就可以把spring-boot启动, 也就意味着spring-boot中的tomcate会自动启动, 默认端口是8080, 注意如果有占用会启动失败;
- 启动成功后,在控制前会看到类似以下的提示,代表8080端口已启用
image.png
5.访问地址: http://localhost:8080/hello
image.png
spring-boot的启动方式
- 在MyfirstSpringBootApplication文件中main方法右键->run as -> Spring Boot App. 关闭spring-boot,在控制前右上侧有
红色
的关闭按钮; - 进入项目目录
cd ~/workspaceEE/myfirst-spring-boot/
mvn spring-boot:run
- 进入项目目录
cd ~/workspaceEE/myfirst-spring-boot/
mvn install
cd target
后会看到在target目录下多了一个 myfirst-spring-boot-0.0.1-SNAPSHOT.jar
, 然后使用java命令启动
java -jar myfirst-spring-boot-0.0.1-SNAPSHOT.jar
属性配置
- 目录存放src/main/resources/application.yml, 配置说明如下:
server:
port: 8089
context-path: /gril
cupSize: B
age: 19
content: "cupSize = ${cupSize}, age = ${age}" //在配置文件中引用配置文件自身的属性
girl: //定义公有属性,该配置需要新建 GirlProgerties.java类配合使用
age: 199
heigh: 19.99
- GirlProgerties.java 类配合属性girl的子属性使用
package com.lxf;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "girl") //该配置对应application.yml配置文件中的girl属性
public class GirlProgerties {
private Integer age;
private float height;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
}
- 在Controller中获取application.yml配置文件的属性
package com.lxf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* 获取application.yml属性内容
* @author lxf
*/
@RestController
public class HelloController {
@Value("${cupSize}")
private String cupSize;
@Value("${age}")
private int age;
@Value("${content}")
private String content;
@Autowired
private GirlProgerties girlProgerties;
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String say()
{
return cupSize + " " +age + content + girlProgerties.getAge();
}
}
- 为
开发环境
配置 application-develop.yml, 注意,服务器端口配置为8088
server:
port: 8088
context-path: /gril
cupSize: A
age: 18
content: "cupSize = ${cupSize}, age = ${age}"
girl:
age: 188
heigh: 18.8
- 为
生产环境
配置 application-develop.yml, 注意,服务器端口配置为8089 - 公共配置 application.yml, 调用
开发环境
的配置
spring:
profiles:
active: develop
- 根据以上第一种启动spring-boot方式启动, 开启8088端口
开发环境
- 感觉以上第三种启动方式, java -jar 带启动参数的方式启动,参数为
生产环境
配置
java -jar myfirst-spring-boot-0.0.1-SNAPSHOT.jar --spring.profiles.active=production
- 以上两步分别启动了
开发环境8088
, 和生产环境8089端口
- 可以分别访问
http://localhost:8088/gril/hello
http://localhost:8089/gril/hello
Controller的使用
-
常用注解
image.png -
使用模板解析配合@Controller注解 使用
控制器
package com.lxf;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@Controller
public class HelloController {
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String say()
{
return "index";
}
}
pom.xml添加依赖
<!-- 配置模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在src/main/resources/templates中新增index.html
<h1>Hello Spring Boot</h1>
启动后访问: http://localhost:8088/gril/hello
配置两个url指向同一个控制器方法
@RequestMapping(value={"/hello", "hi"}, method=RequestMethod.GET)
public String say()
{
return cupSize + " " +age + content + girlProgerties.getAge();
}
以上配置http://localhost:8088/gril/hello和http://localhost:8088/gril/hi等效
同时@RequestMapping也可以作用在控制器上与springMvc用法一致
获取URL参数的注解
image.png- 接收参数一
@RequestMapping(value="/hello/{id}", method=RequestMethod.GET)
public String say(@PathVariable("id") Integer id)
{
return "id="+id;
}
访问: http://localhost:8088/gril/hello/12, 输出结果 id=12
- 接收参数二
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String say(@RequestParam(value="id", required=false, defaultValue="0") Integer myId)
{
return "id="+myId;
访问: http://localhost:8088/gril/hello/hello?id=123 , 输出: id=123
@RequestMapping(value="/hello", method=RequestMethod.GET)
@GetMapping(value="/hello") 和以上一行等效
使用数据库
- pom.xml配置添加依赖
<!-- 配置使用数据库 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
- application.properties
server.port=8099
#DB Configuration:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=123456
#JPA Configuration:
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
- Girl实体类
package com.lxf.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.stereotype.Component;
/**
* gril实体类, 对应girl数据库
* @author lxf
*/
@Entity
@Table(name="t_girl")
public class Girl {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private Integer age;
private String curSize;
public Girl(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getCurSize() {
return curSize;
}
public void setCurSize(String curSize) {
this.curSize = curSize;
}
}
- 启动spring-boot会在数据库中自动创建
t_girl
表 - 将application.properties配置
spring.jpa.hibernate.ddl-auto=update
- 新建 GirlRepository接口操作数据库,相当与Dao
package com.lxf;
import com.lxf.model.Girl;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface GirlRepository extends JpaRepository<Girl,Integer> {
/**
* 自定根据年龄查询列表
* @param age
* @return
*/
public List<Girl> findByAge(Integer age);
}
- 新建GirlService
package com.lxf;
import com.lxf.model.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
public class GirlService {
@Autowired GirlRepository girlRepository;
/**
* 使用@Transactional事务注解
*/
@Transactional
public void insertTwo()
{
Girl girlA = new Girl();
girlA.setAge(36);
girlA.setCurSize("A");
girlRepository.save(girlA);
Girl girlB = new Girl();
girlB.setAge(38);
girlB.setCurSize("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb");
girlRepository.save(girlB);
}
}
- 新建GirlController控制器
package com.lxf;
import com.lxf.model.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 请求controller
*/
@RestController
public class GirlController {
@Autowired
private GirlRepository girlRepository;
@Autowired GirlService girlService;
/**
* 查询女孩列表
* @return
*/
@GetMapping(value="/girls")
public List<Girl> girlList()
{
return girlRepository.findAll();
}
@GetMapping(value = "/girls/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id)
{
return girlRepository.findOne(id);
}
/**
* 新增女生
*/
@PostMapping(value = "/girls")
public Girl girlAdd(@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age)
{
Girl girl = new Girl();
girl.setAge(age);
girl.setCurSize(cupSize);
return girlRepository.save(girl);
}
/**
* 更新女孩信息
* @param id
* @param cupSize
* @param age
* @return
*/
@PutMapping(value = "/girls/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id,
@RequestParam("age") Integer age,
@RequestParam("cupSize") String cupSize
){
Girl girl = new Girl();
girl.setId(id);
girl.setCurSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}
/**
* 删除女生信息
* @param id
*/
@DeleteMapping(value = "/girls/{id}")
public void girlDel(@PathVariable("id") Integer id)
{
girlRepository.delete(id);
}
/**
* 通过年龄查询列表
* @param age
* @return
*/
@GetMapping(value = "/girls/age/{age}")
public List<Girl> girlListByAge(@PathVariable("age") Integer age)
{
return girlRepository.findByAge(age);
}
/**
* 调用事务同时添加两条记录
*/
@PostMapping(value = "/girls/two")
public void girlAddTwo()
{
girlService.insertTwo();
}
}