Spring Boot(四)连接数据库

  写在前面:以下所有操作均在MAC OS环境下进行。本次讲解主要是Spring Boot如何连接数据库(mysql),以及对数据库进行增删查改的操作。学习视频链接

  目录

  • 如何连接数据库
  • 增删查改操作

一、如何连接数据库

  Spring Boot是通过Spring-Date-Jpa这一组件来对数据库进行连接的,那么什么是JPA,请看这位大神,这里就不讲解了。首先在pom.xml文件里要填加Spring-Date-Jpa和mysql这两个组件

<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下加上datesource和jpa属性,代码如下,详情见图1。(先看图下面的详解

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
P1
图1

记住,datesource和jpa一定是在spring的下一层。

 在datasource里要填四个属性:driver-class-name、url、username、password。

  1.  driver-class-name统一填:com.mysql.jdbc.Driver
  2. url, 里127.0.0.1:3306是默认本机地址,如果数据库不是配置在本地,就填它所在机器的网络ip地址,端口3306看你有没有改,mysql默认就是3306,然后dbgirl是数据库视图名,要先在数据库里新建一个schema,将其命名为dbgirl或者其他的名字。
  3. username和password就是你数据库的用户名和密码。

 然后是jpa要填两个属性dll-auto和show-sql

  1. dll-auto里可以设置五种属性:update、create、create-drop、none、validate等。update意思是如果你数据库里存在这样的schema,它不会主动改变里面原有的值;create则是会每次新建一个空表,若存在一个相同的schema,那就删掉它,再新建;而create-drop是会新建一个空表,然后在应用结束后,自动将此表从数据库里删除;none就是什么都不做;最后的validate是用来验证schema里面的属性是否跟表结构一致,不一致会报错。
  2. show-sql很简单,就是在项目运行的时候,在控制台看到sql语句。

最后我们新建一个空表,在Spring Boot里就是新建一个类。我们新建一个Girl的类(下面get和set以及无参的类都是可以自动生成的)。

package com.imooc.girl;

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

@Entity    //使其对应数据库的一个表
public class Girl {

    @Id
    @GeneratedValue
    private Integer id;

    private String cupSize;

    private Integer age;

    public Girl() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }
}

二、对表的增删查改

  其实增删查改对应了四种请求类型:POST、DELETE、GET、PUT(完整代码会在最后贴出)

  为此,我们要新建一个GirlController类和一个GirlRepository接口类,如下图2、图3所示:

P2
图2

 

P3
图3

 1、请求类型:POST,请求路径:/girls,功能:创建一个女生。  

  POST特点:1、将传输的数据放在http内部;2、对传输数据的大小没有限制;3、通过tcp传输协议进行两步操作:(1)先发送header;(2)再发送data,其中响应时间分别为100和200;4、参数不会被保留;5、浏览器回退影响存储

    /**
     * 添加一个女生
     */
    @PostMapping(value = "/girls")
    public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                        @RequestParam("age") Integer age) {
        Girl girl = new Girl();
        girl.setCupSize(cupSize);
        girl.setAge(age);

        Girl save = girlRepository.save(girl);
        return save;
    }

  因为用POST请求方式,所以不能直接在浏览器内测试,需要用到POSTMAN之类的调试软件,这里用postman来作为演示,

P3
图3

2、请求类型:DELETE,请求路径:/girls/id,功能:删除一个女生。

  DELETE:功能就是对数据进行删除操作,很单一,下面代码不返回值。

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;

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

3、请求类型:GET,  请求路径:/girls,功能:获取女生列表;请求路径:/girls/id,功能按id号查询一个女生

GET特点:1、将传输数据放在url中;2、因为对url长度有限制,所以对传输数据的大小有限制;3、通过tcp传输协议进行一步操作:直接将header和data一起发送,响应时间200;4、不能用来传递敏感信息,会被看到;5、参数会被保留;6、浏览器回退不影响存储。

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;

    /**
    * 查询所有女生
    */
    @GetMapping(value = "/girls")
    public List<Girl> girlList() {
        return girlRepository.findAll();
    }
    
    /**
     * 查询一个女生
     */
    @GetMapping(value = "/girls/{id}")
    public Optional<Girl> girlFindOne(@PathVariable("id") Integer id) {
        return  girlRepository.findById(id);
    }
}

4、请求类型:PUT,  请求路径:/girls/id,功能按id号更新一个女生信息

PUT:主要用来更新表单内已有对象的信息,不增加或删除存储信息,功能单一。

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;
    
    /**
     * 更新一个女生
     */
    @PutMapping(value = "/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") 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);
    }
  
}

其中GET和PUT这两种请求方式可以代替PUT和DELETE

5、扩展一下,通过年龄来查询:请求方式:GET,请求路径:girls/age/{age},功能:通过年龄来查询对应的女生列表

(1)首先要在GirlRepository这个接口里,添加一个公共类

P5
图5

(2)然后按照上面例子一样

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;

    /**
     * 通过年龄查询
     */
    @GetMapping(value = "/girls/age/{age}")
    public List<Girl> girlListByage(@PathVariable("age") Integer age){
        
        return girlRepository.findByAge(age);
    }

}

下面是完整代码

package com.imooc.girl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;

    /**
     * 查询所有女生
     */
    @GetMapping(value = "/girls")
    public List<Girl> girlList() {
        return girlRepository.findAll();
    }

    /**
     * 添加一个女生
     */
    @PostMapping(value = "/girls")
    public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                          @RequestParam("age") Integer age){
        Girl girl = new Girl();
        girl.setCupSize(cupSize);
        girl.setAge(age);

        return girlRepository.save(girl);
    }

    /**
     * 查询一个女生
     */
    @GetMapping(value = "/girls/{id}")
    public Optional<Girl> girlFindOne(@PathVariable("id") Integer id) {
        return  girlRepository.findById(id);
    }

    /**
     * 更新一个女生
     */
    @PutMapping(value = "/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") 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);
    }

    /**
     * 删除
     */
    @DeleteMapping(value = "/girls/{id}")
    public void girlDelete(@PathVariable("id") Integer id){
        girlRepository.deleteById(id);
    }

    /**
     * 通过年龄查询
     */
    @GetMapping(value = "/girls/age/{age}")
    public List<Girl> girlListByage(@PathVariable("age") Integer age){
        return girlRepository.findByAge(age);

    }
    
}

简单总结一下

  对比曾经用过的JSP servlet,spring boot连接数据库并进行操作是十分简单和方便的,不需要写sql语句,很好很强大。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值