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=8081 server.context-path server.context-path=/sell

在application.yml下配置:

server: port: 8082 
context-path: /sell

注意:每个属性冒号后面打空格才能显示出来关键字;

此处推荐使用application.yml配置文件,更加方便规范。


2.2 自定义属性

server: port: 8082 context-path: /sell high: 1.75 age: 25

注意自定义属性的关键字也是自己定义的,就相当于变量名,第一,变量名要顶格;第二,冒号后面要打空格。
自定义属性的使用:

@RestController
public 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

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/hello
public 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
    show-sql: true 
#create:每次运行程序会自动创建要给空表,如果存在了这个表,会自动删除,然后创建一个同名的空表 
#ddl-auto: update 第一运行的时候会自动创建空表,之后运行保留原有表格数据,并更新 
#ddl-auto: create-drop 应用结束,就会删除创建的表格。 

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

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Girl {
    @Id
    @GeneratedValue
   
    @GeneratedValue
    private Integerid;
    private StringcupSize;
    private Integerage;

    public Girl(){
    }

    //……get and set
}

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.*;

@RestController
public 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为事务管理。

@Service
public 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);
    }
}

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐