zoukankan      html  css  js  c++  java
  • 使用spring boot中的JPA操作数据库

    前言

    Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧。

    一、在pom中添加依赖

           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>6.0.6</version>
            </dependency>

    二、项目配置

    在application.yml中填写数据库及JPA相关配置信息(这样在dev和prod两个环境是可以共用的),示例如下:

    # 多环境配置
    spring:
      profiles:
        active: prod
    
    # 通用数据源配置
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/student_info?serverTimezone=GMT%2B8
        username: root
        password: root
        hikari:
          maximum-pool-size: 20
          minimum-idle: 5
      # JPA相关配置
      jpa:
        hibernate:
          ddl-auto: create
        show-sql: true

    说明:接口调试时,jpa中的ddl-auto:要改为update,否则每次运行都会清空数据哦!

    编写好项目配置后,这里我们可以启动项目,会报错如下:

     这是因为我没创建这个库引起的,那么我们先把这个库创建起来,接着我们重新启动项目就不会报错了,还帮我们显示出了创建sql语句,是不是很赞呢,哈哈

    三、 数据库的操作

    前面的项目基本搭建完成,下面我们通过增删改查的一系列操作,来完成数据库的操作。

    1、创建一个实体

    创建一个名为Student的类,示例如下:

    package com.rongrong.springboot.demo.student;
    
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    /**
     * @author rongrong
     * @version 1.0
     * @description:
     * @date 2019/12/30 21:24
     */
    @Entity
    public class Student {
    
        //主键ID
        @Id
        //自增型
        @GeneratedValue
        private Integer id;
        private String name;
        private Integer age;
        private String sex;
        private String email;
    }

    2、数据库操作逻辑编写

     创建一个名为StudentResponstory的接口,继承JPAResponstory,示例如下:

    package com.rongrong.springboot.demo.student;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    /**
     * @author rongrong
     * @version 1.0
     * @description:
     * @date 2019/12/30 22:20
     */
    public interface StudentResponstory extends JpaRepository<Student,Integer> {
    }

    创建一个名为StudentController的类,通过增删改查操作,来实现库的操作逻辑,具体示例代码如下:

    package com.rongrong.springboot.demo.student;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    /**
     * @author rongrong
     * @version 1.0
     * @description:
     * @date 2019/12/30 20:40
     */
    @RestController
    public class StudentController {
    
        @Autowired
        StudentResponstory studentResponstory;
    
        /**
         * 查询所有学生列表
         *
         * @return
         */
        @GetMapping("/students")
        public List<Student> sudentFindAll() {
            return studentResponstory.findAll();
        }
    
        /**
         * 新增一个学生
         *
         * @param name
         * @param age
         * @param sex
         * @param email
         * @return
         */
        @PostMapping("/studentAdd")
        public Student sudentAdd(@RequestParam("name") String name, @RequestParam("age") Integer age,
                                 @RequestParam("sex") String sex, @RequestParam("email") String email) {
            Student student = new Student();
            student.setName(name);
            student.setAge(age);
            student.setSex(sex);
            student.setEmail(email);
            //保存和更新都用该方法
            return studentResponstory.save(student);
        }
    
        /**
         * 通过iD查找一个学生
         *
         * @param id
         * @return
         */
        @GetMapping("/sudentFindOne/{id}")
        public Student sudentFindOne(@PathVariable("id") Integer id) {
            return studentResponstory.findOne(id);
        }
    
        /**
         * 通过ID更新一个学生信息
         *
         * @param id
         * @param name
         * @param age
         * @param sex
         * @param email
         * @return
         */
        @PutMapping("/sudentUpdate/{id}")
        public Student sudentUpdate(@PathVariable("id") Integer id, @RequestParam("name") String name, @RequestParam("age") Integer age,
                                    @RequestParam("sex") String sex, @RequestParam("email") String email) {
            Student student = new Student();
            student.setId(id);
            student.setName(name);
            student.setAge(age);
            student.setSex(sex);
            student.setEmail(email);
            //保存和更新都用该方法
            return studentResponstory.save(student);
        }
    
        /**
         * 通过ID删除一个学生
         *
         * @param id
         */
        @DeleteMapping("/sudentDelete/{id}")
        public void sudentDelete(@PathVariable("id") Integer id) {
            studentResponstory.delete(id);
        }
    
        /**
         * 通过年龄查询学生
         *
         * @param age
         * @return
         */
        @GetMapping("/sudentFindByAge/{age}")
        public List<Student> sudentFindByAge(@PathVariable("age") Integer age) {
            return studentResponstory.findByAge(age);
        }
    
    }

    通过年龄查询学生查询时,需要在接口中添加如下方法:

    package com.rongrong.springboot.demo.student;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import java.util.List;
    
    /**
     * @author rongrong
     * @version 1.0
     * @description:
     * @date 2019/12/30 22:20
     */
    public interface StudentResponstory extends JpaRepository<Student,Integer> {
        List<Student> findByAge(Integer age);
    }

    再次启动项目,通过postman进行逐一测试,即可。

    项目启动效果图

    postman效果图

    到此,spring boot中jpa的使用介绍完,有兴趣的同学可以自行尝试。

  • 相关阅读:
    Android零碎知识之Style and Theme
    Java 线程池(一):开篇及Executor整体框架介绍
    ADB命令笔记本
    volatile变量理解 via《Java并发编程实战》
    Java NIO
    乱七八糟(一)
    Android事件分发机制
    AndroidStudio下的依赖管理
    shell--填过的坑
    兼容类问题
  • 原文地址:https://www.cnblogs.com/longronglang/p/12122220.html
Copyright © 2011-2022 走看看