SpringBoot快速入门

来源:互联网 发布:天刀淘宝刷白发多少钱 编辑:程序博客网 时间:2024/05/21 05:58

1 简介

SpringBoot是SpringMVC的升级,也是学习Spring Cloud的基础部分;

SpringBoot特点如下:

1、  化繁为简,简化配置;

       (配置简单;不用谢sql语句---可利用配置文件和实体类自动创建数据表;)

2、  备受关注,是下一代框架;

3、  微服务的入门级微框架;

学习Spring Boot知识基础:

1、  maven

2、  Spring 注解

3、  Restful API  

 

2 项目属性配置

2.1 公共属性配置

在application.properties或application.yml(推荐)下进行项目属性配置。

在application.properties下配置:

server.port=8081server.context-pathserver.context-path=/sell 

在application.yml下配置:

server:  port: 8082  context-path: /sell
         注意:每个属性冒号后面打空格才能显示出来关键字;
此处推荐使用application.yml配置文件,更加方便规范。
 

2.2 自定义属性

server:  port: 8082  context-path: /sellhigh: 1.75age: 25
注意自定义属性的关键字也是自己定义的,就相当于变量名,第一,变量名要顶格;第二,冒号后面要打空格。
自定义属性的使用:
@RestControllerpublic class HelloController {   @Value("${high}")    private String high;    @Value("${age}")    private Integer age;    @RequestMapping(value="hello",method = RequestMethod.GET )    public String say(){        return "Hello Spring Boot";    }   @RequestMapping(value="info",method = RequestMethod.GET )    public String say2(){        String str ="身高:"+high+"\n;年龄:"+age;        return str;    }
 
属性嵌套属性:

         content:"high:${high}},age:${age}}" 

配置分组写到类里面
有时候为了节省时间和工作量,可以将配置的属性注入到类属性当中:

@Component //声明注入Bean@ConfigurationProperties(prefix = "sell")public class SellProperties{    @Value("${high}")    private Stringhigh;    @Value("${age}")    private Integerage;    @Value("${content}")    private Stringcontent;    public SellProperties(){    }//……}

 

2.3 多环境配置 

如果一个事物有属性有不同的值,需要配置多个版本,则在application.yml文件激活其他版本的配置,在对应配置文件配置相关属性即可:
例如:
application.yml配置激活application-dev.yml配置文件
配置文件application.yml

spring:  profiles:    active: dev
 

配置文件application-dev.yml

server:    port: 8081    context-path: /sellhigh: 1.75age: 25content: "high:${high},age:${age}" 

 

2.4 Controller的使用

1

@Controller是用来处理http请求的 ,配合模板来使用

@RestController:Spring4后新加的组件,原来返回Json需要@ResponseBody+@Controller

@RequestMapping:配置URL映射

2

@PahtVariable:获取url中的数据

@RequestParam:获取请求参数的值

@GetMapping:组合注解 

/** * @RestController=@Controller+@ResponseBody *///@Controller//@ResponseBody()@RestController//@RequestMapping("/temp") //需要作为Url的方法名的前缀和方法名拼接起来:http://127.0.0.1:8081/sell/temp/hellopublic class HelloController {   @Value("${high}")    private Stringhigh;    @Value("${age}")    private Integerage;    @Value("${content}")    private Stringcontent;    @Autowired    private SellPropertiessellProperties;    @RequestMapping(value="hello",method = RequestMethod.GET )    public Stringsay(){        return "HelloSpring Boot";    }    /**     * 多个url地址访问到同一个方法,用集合的方式写url方法地址     * @return     */   @RequestMapping(value={"info","private"},method = RequestMethod.GET )    public Stringsay2(){        String str ="身高:"+high+"\n;年龄:"+age;       // return str;        return content;    }    @RequestMapping(value="assem",method = RequestMethod.GET )    public Stringsay3(){        return sellProperties.getContent();    }    @RequestMapping(value="template",method = RequestMethod.GET )    public Stringsay4(){        return "index";    }    /*      路参绑定      @PathVariable(value ="id" ,required = false,defalutValue="0"      表示将路径中的参数绑定给方法中的参数,required=false表示参数传不传都可以,不传的时候默认值为0     */    @RequestMapping(value="/pathV/{id}",method = RequestMethod.GET )   // @GetMapping(value)    public Stringsay4(@PathVariable(value = "id",required = false,defalutValue="0") Integer id){        return "id"+id;    }}

 

3 数据库操作

3.1 Spring-Data-Jpa

SpringBoot操作数据库需要使用Spring-Data_Jpa。

Spring-Data-Jpa(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。


3.2 操作数据库

1 表的自动创建

1)设计Restful接口

 

2)配置: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></dependency>

在application.yml文件中配置链接数据库的属性,注意一定要格式对齐,否则会报错

# 默认的配置文件,可以直接在此配置当中配置属性,也可以在此配置文件激活其他配置文件spring:   profiles:        active: dev   datasource:        driver-class-name: com.mysql.jdbc.Driver        url: jdbc:mysql://127.0.0.1:3306/girl        username: root        password: root   jpa:        hibernate:            ddl-auto: create #每次运行程序会自动创建要给空表,如果存在了这个表,会自动删除,然后创建一个同名的空表#ddl-auto: update #第一运行的时候会自动创建空表,之后运行保留原有表格数据,并更新#ddl-auto: create-drop #应用结束,就会删除创建的表格。        show-sql: true

3)创建数据库girl,不需要创建表,只需要创建对应的类。

import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Girl {    @Id    @GeneratedValue       @GeneratedValue    private Integerid;    private StringcupSize;    private Integerage;    public Girl(){    }    public IntegergetId() {        return id;    }    public void setId(Integerid) {        this.id = id;    }    public StringgetCupSize() {        return cupSize;    }    public void setCupSize(StringcupSize) {        this.cupSize = cupSize;    }    public IntegergetAge() {        return age;    }    public void setAge(Integerage) {        this.age = age;    }}

 

4)然后运行项目“run’ 项目名application’”会自动创建一个和实体类girl对应的表


2 自动查询

1)  修改配置文件application.yml中对数据库的属性设置:ddl-auto:update,执行数据库操作的时候可以保留数据库中的数据。

2)  创建接口,可以做为代理来自动访问数据库:

import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;/** * 继承自一个访问的数据库,列表为Girl,主键id类型为Integer */public interface GirlRepository extends JpaRepository<Girl,Integer>{    //通过年龄查询,修改DDL,自定义查询方法    public List<Girl> findByAge(Integer age);}3)  创建一个具体的控制类GirlController,并且自动注入上述操作数据库的接口GirlRepository:import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;@RestControllerpublic class GirlController {    @Autowired    private GirlRepositorygirlRepository;    @GetMapping(value="/girls")    public List<Girl>girlList(){        return girlRepository.findAll();//不需要数据库一句话可以查询接口数据库中    }    /**     * 添加要给女生     * @param cupSize     * @param age     * @return     */   //@PostMapping(value="/postGirls")   //@RequestMapping(value="/getGirl_1",params ={"cupSize","age"},method=RequestMethod.GET)    @RequestMapping(value="/getGirl_1/{cupSize}/{age}",method=RequestMethod.GET)    public GirlgirlAdd(@PathVariable("cupSize") String cupSize,                        @PathVariable("age") Integer age)    {        Girl girl=new Girl();        girl.setAge(age);        girl.setCupSize(cupSize);        return girlRepository .save(girl);//save返回了添加的对象    }    @PostMapping(value="/postGirl_2")    public GirlgirlAdd2(@RequestParam("cupSize") String cupSize,                        @RequestParam("age") Integer age)    {        Girl girl=new Girl();        girl.setAge(age);        girl.setCupSize(cupSize);        return girlRepository .save(girl);//save返回了添加的对象    }    //查询    @GetMapping(value="/girls/find/{id}")    public GirlgirlFindOne(@PathVariable Integer id)    {        return girlRepository.findOne(id);    }    //更新    @PutMapping(value="/girls/update/{id}")    public GirlgirlUpdate(@PathVariable Integer id,                           @RequestParam("cupSize") String cupSize,                           @RequestParam("age") Integer age)    {        Girl girl=new Girl();        girl.setId(id);        girl.setAge(age);        girl.setCupSize(cupSize);        return girlRepository.save(girl);    }    //删除    @GetMapping(value="/girls/delete/{id}")    public void girlDeleteOne(@PathVariable Integer id)    {        girlRepository.delete(id); //没有返回值    }    //通过年龄查询列表,在在接口中自定义修改查询方法,然后调用接口中的方法即可。    @GetMapping(value="/girls/age/{age}")    public List<Girl>girlListByAge(@PathVariable("age") Integer age)    {        return girlRepository.findByAge(age);    }} 

在控制器中,既可以调用接口已经实现好的对数据库的操作方法,又可以在接口修改查询方法,然后在控制器中调用该方法;总之,都不需要写SQL语句。

 

4 事务管理

将若干条操作绑定在一起作为一个原子性行为,要么同时成功,要么都失败。

创建服务GirlService.java,注意将操作方法注解@Transactional为事务管理

@Servicepublic class GirlService {    @Autowired    private GirlRepository girlRepository;    @Transactional //事务注解 --将该方法的所有操作作为一个事务进行,要么全部执行,要么全部失败    public void insertTwo()    {        Girl girlA=new Girl();        girlA.setAge(23);        girlA.setCupSize("C");        girlRepository.save(girlA);        Girl girlB=new Girl();        girlB.setAge(20);        girlB.setCupSize("D");        girlRepository.save(girlB);    }}