Spring Boot 学习(四)数据库操作

五、数据库操作

5.1 概念说明

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

Spring-Data-Jpa就是spring对Hibernate的整合。

5.2 POM添加组件

5.2.1 JPA组件

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

5.2.2 mysql组件

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

5.3 配置数据库连接和JPA信息

5.3.1 配置信息

spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    data-username: root
    data-password: huangwei1
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

5.3.2 配置说明

driver-class-name:配置数据驱动

url:配置数据连接地址和数据库名

data-username:用户名

data-password:密码

hibernate.ddl.auto:可以设置create、create-drop、none、update、validate,create表示按照类自动建表,后面详细讲述。

show-sql:设置true可在控制台输出sql语句

5.4 新建实体类

5.4.1 实体类代码

package com.imooc;

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

5.4.2 IDEA get/set 快捷键

    alt+insert

5.4.3 运行测试


数据库中自动创建了一个girl表,且字段名称和类型都与实体类Girl一致。

5.4.4 ddl说明

create:上面使用到的方式,每次运行时会删除原表,创建一个新表

update:若表不存在,则新建表,若表存在,不会删除表内数据。

create-drop:在应用停下来的时候会把创建的表删掉。

none:什么都不做,默认属性

validate:会验证类里面的属性是否和表一致,不一致会报错。

5.5 数据操作实现

5.5.1 JpaRepository使用

创建一个接口GirlRepository继承JpaRepository:


5.5.2 控制类主体代码

package com.imooc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;
    
}

5.5.3 获取list实现

方法实现:

@GetMapping(value = "/girls")
    public List<Girl> girlList(){
        return girlRepository.findAll();
    }

效果显示:

    

5.5.4 Add实现

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

5.5.4 查询实现

@GetMapping(value = "/girls/{id}")
    public Optional<Girl> girlFindOne(@PathVariable("id") Integer id){
        return girlRepository.findById(id);
    }

这里与视频中有点不一样:

@GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id){
        return girlRepository.findOne(id);
    }

5.5.5 更新实现

@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.setCupSize(cupSize);
        girl.setAge(age);

        return girlRepository.save(girl);
    }

注意:使用PUT方式,客户端不能使用form-data模式,要使用x-www-form-urlencoded模式

5.5.6 删除实现

@DeleteMapping(value = "/girls/{id}")
    public void girlDelete(@PathVariable("id") Integer id){
        girlRepository.deleteById(id);
    }
视频使用的方式:
girlRepository.delete(id);

5.5.6 非ID属性查询列表

以Age为例,首先要在GrilRepository中增加fingByAge方法:

public interface GirlRepository extends JpaRepository<Girl,Integer> {
    public List<Girl> findByAge(Integer age);
}

Controller方法:

@GetMapping(value = "/girls/age/{age}")
    public List<Girl> girlListByAge(@PathVariable("age") Integer age){
        return girlRepository.findByAge(age);
    }

5.6 事物管理,@Transactional

使用示例,新建GirlService类:

@Service
public class GirlService {

    @Autowired
    private GirlRepository girlRepository;

    @Transactional
    public void insertTwo(){
        Girl girlA = new Girl();
        girlA.setCupSize("A");
        girlA.setAge(18);
        girlRepository.save(girlA);

        Girl girlB = new Girl();
        girlB.setCupSize("BBB");
        girlB.setAge(19);
        girlRepository.save(girlB);
    }
}

Controller新增方法:

@PostMapping(value = "/girls/two")
    public void girlAddTwo(){
        girlService.insertTwo();
    }
注意:mysql需要将表的引擎设置为InnoDB才能支持事务管理,具体设置方法见  Mysql设置默认引擎为InnoDB


上一章:Spring Boot 学习(三)Controller的使用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值