SpringBoot入门(三):使用Spring-Data-Jpa操作数据库

1.前期准备

1.1依赖配置

  • 使用Spring-Data-Jpa ,JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hiberbate、TopLink。Spring-Data-Jpa 是对Hibernate的整合
  • 添加依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

1.2application.yml配置

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springbootdemo
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
  • ddl-auto:
    • create 表示创建一个空的表,如果有数据则会清空
    • update 表示创建一个空的表,如果有数据不会清空,会保存
    • create-drop 应用停下来时,把表删掉
    • none 什么都不做
    • validate 验证表与数据库字段是否对应,不一致的话则会报错。
  • show-sql 表示在控制台显示sql语句

1.3数据库设置、相关类实现

  • 根据上一部的url,新建springbootdemo 的数据库
  • 新建一个类
package com.antfin.firstboot;

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

@Entity
public class Student {
    @Id
    @GeneratedValue
    private Integer id;

    private  String stuname;
    private  String sex;
    public Student(){}

    public Integer getId() {
        return id;
    }

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

    public String getStuname() {
        return stuname;
    }

    public void setStuname(String stuname) {
        this.stuname = stuname;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
  • 此时再运行,就会发现数据库中生成了对应的表。[我这里生成了两张表,还有一张hibernate_sequence 设置的自增也没有实现,所以手动设置了自增]

2.代码演示

2.1查询所有

  • 新建StudentRepository 接口
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRepository extends JpaRepository<Student,Integer> {
}
  • 新建StudentController
 @RestController
public class StudentController {

    @Autowired
    private StudentRepository studentRepository;

    /**
     * 查询所有学生
     * @return
     */
    @GetMapping(value = "/students")
    public List<Student> stuList(){
        return studentRepository.findAll();
    }
}
  • 浏览器输入http://localhost:8080/students 或者推荐使用postman

x43d3.png

2.2增加学生

/**
     * 添加一个学生
     * @param addr
     * @param name
     * @return
     */
    @PostMapping (value="/addStu")
    public Student stuAdd(
            @RequestParam("sex") String sex,
                         @RequestParam("stuname") String stuname){
        Student stu=new Student();
        stu.setStuname(stuname);
        stu.setSex(sex);
        return  studentRepository.save(stu);
    }

x4Bmn.png

2.3通过ID查询学生

 /**
     * 通过id查询一个学生
     */
    @GetMapping(value = "/getStu/{id}")
    public Student stuGetByid(
            @PathVariable("id") Integer id) {
        return studentRepository.findById(id).get();
    }

2.4更新一个学生

/**
 * 更新一个学生信息
 */
@PutMapping(value="/getStu/{id}")
public Student updateStu(
        @PathVariable("id") Integer id,
        @RequestParam("sex") String sex,
        @RequestParam("stuname") String stuname)
{
    Student stu=new Student();
    stu.setId(id);
    stu.setStuname(stuname);
    stu.setSex(sex);

    return studentRepository.save(stu);
}
  • 唯一要注意的是,使用put提交,postman要选择x-www-form-urlencoded

x4z1z.png

2.5删除学生

 /**
     * 删除学生
     */
    @DeleteMapping(value = "/getStu/{id}")
    public void updateStu(@PathVariable("id") Integer id){
          studentRepository.deleteById(id);
    }

2.6自定义查询

自定义通过性别来查询。

  • StudentRepository接口中添加方法

public interface StudentRepository extends JpaRepository<Student,Integer> {
    //通过性别查询
    public List<Student> findBySex(String sex);
}
  • 新建方法
/**
    * 通过性别查询学生
*/
@GetMapping(value = "/getStuBySex/{sex}")
public List<Student> stuGetBysex(
    @PathVariable("sex") String  sex) {
    return studentRepository.findBySex(sex);
}
  • 测试

x4h2Y.png

3.Demo下载

  • 楼主建议,刚开始学习,不要追求完美,重要的是走通流程,我的这个Demo花了大概一周的时间,中间无数次出错,终于搞定,希望大家好好利用!
  • demo

猜你喜欢

转载自blog.csdn.net/endlessseaofcrow/article/details/80336603