使用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的使用介绍完,有兴趣的同学可以自行尝试。

原文地址:https://www.cnblogs.com/longronglang/p/12122220.html

时间: 2024-10-06 12:07:17

使用spring boot中的JPA操作数据库的相关文章

企业分布式微服务云SpringCloud SpringBoot mybatis (七)Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdb

基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD

完成一个RESTful服务,提供几个访问接口,用来操作较简单的联系人信息,数据保存在Sql Server数据库中. 1.使用STS创建工程. 使用STS创建RESTful工程,可以参考: <用Spring Tools Suite(STS)开始一个RESTful Web Service><SpringBoot构建RESTful service完成Get和Post> 新建项目时的Project Name,Group,Atifact,Package这些参数按照实际要求填. 项目引入依赖w

基于Spring Boot,使用JPA动态调用Sql查询数据

在<基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD>,<基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合>完成了CRUD,调用存储过程查询数据. 很多复杂的情况下,会存在要直接执行SQL来获取数据. 通过“EntityManager”创建NativeQuery方法来执行动态SQL. 1.查询结果集映射 在包“com.kxh.example.demo.domain”下的“Contact”实体上编写命名的结果

spring boot 中Spring data jpa数据库表字段命名策略

spring boot 中Spring data jpa命名策略 数据库,表字段命名是驼峰命名法(UserID),Spring data jpa 自动更新之后是 user_id, 表字段不对照, Spring data jpa基于Hibernate5.0 application.properties 写法 1.无修改命名 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNa

Spring Boot 中 10 行代码构建 RESTful 风格应用

RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 RESTful 提供了很好的支持,常见的相关注解有: @RestController @GetMapping @PutMapping @PostMapping @DeleteMapping @ResponseBody ... 这些注解都是和 RESTful 相关的,在移动互联网中,RESTful 得

springboot(十一):Spring boot中mongodb的使用

mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置漏洞被攻击,数据被删,引起了人们的注意,感兴趣的可以看看这篇文章:场屠戮MongoDB的盛宴反思:超33000个数据库遭遇入侵勒索,同时也说明了很多公司生产中大量使用mongodb. mongodb简介 MongoDB(来自于英文单词"Humongous",中文含义为"庞大&qu

Spring Boot中的事务管理

原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合.由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作数据的并不可靠,需要在这种情况下进行回退. 事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行

企业分布式微服务云SpringCloud SpringBoot mybatis (十七)Spring Boot中的事务管理

快速入门 在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager.所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用. 我们以之前实现的<用spring-data-jpa访问数据库>的示例Chapter3-2-2作为基础工程进行事务的使用常识

企业分布式微服务云SpringCloud SpringBoot mybatis (十六)Spring Boot中使用LDAP来统一管理用户信息

LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化.目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力.目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略.而目录服务的更新则一般都非常简单.这种目录可以存储包括个人信息.web链结.jpeg图像等各种信息.为了访问存储在目录中的