Spring Boot 学习研究笔记(七) -使用SpringData JPA访问PostgreSql数据库

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: Spring Boot 学习研究笔记(七) -使用SpringData JPA访问PostgreSql数据库

一、SpringBootData JPA介绍

 SpringData:是Spring提供了一个操作数据的框架。

  SpringData JPA:是SpringData框架下的一个基于JPA标准操作数据的模块,简化操作持久层的代码,只需要编写接口就可以。

 

二、SpringBoot整合SpringData JPA

1、新建项目

 

2 、maven依赖配置(pom.xml)

(1)、postgresql 集成 配置

<dependency>
    <groupId>org.postgresql</groupId>
     <artifactId>postgresql</artifactId>
     <scope>runtime</scope>
</dependency>

(2)、jpa 集成配置

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

 

3、数据源配置(application.properties)

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/test
spring.datasource.username=postgres
spring.datasource.password=123456
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

注意:

  • url, username,password 等信息是否配置正确。
  • spring.jpa.hibernate.ddl-auto 指定为 update,这样框架会自动帮我们创建或更新表结构

 


   写入完成后,org.postgresql.Driver会报错(可以不管)。原因是postgresql这个jar包依赖类型默认是runtime(运行时生效),所以并不影响代码的运行。

修改方法

  右键点击项目—>选择“open module settings”—>点击“Dependencies”,找到Maven:org.postgresql:postgresql:42.2.18 将runtime修改为Compile。

 

修改后效果:

4、编写实体类

 

这里,我们用了一系列的注解。

例如:@Table、@Column分别对应了数据库的表、列,@GeneratedValue 用于指定ID主键的生成方式。

package com.example.demo;
import javax.persistence.*;
import java.io.Serializable;
/**
 * @DESC users表的实体类
 * @author guchuang
 */
@Entity
@Table(name="users")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "menuSeq")
    @SequenceGenerator(name = "menuSeq", initialValue = 100000, allocationSize = 1, sequenceName = "MENU_SEQUENCE")
    @Column(name="id")//数据库字段名
    private int id;
    private int age;
    private String name;
    public User() {
    }
    public User(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", age=" + age + ", name=" + name + "]";
    }
}

5、编写Dao接口

/**
 * @DESC 实现jpa接口,拥有jpa提供的默认crud操作,无需自己写实现代码(除非要扩展功能)
 * @author guchuang
 *
 */
public interface UserRepository extends JpaRepository<User,Integer> {
}

6、编写Service 接口

package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    public List<User> getUser() throws SQLException {
        System.out.println("userRepository: " + userRepository);
        List<User> users = userRepository.findAll();
        return users;
    }
    public User getUser(@PathVariable(value="id") int id) throws SQLException {
        Optional<User> user = userRepository.findById(id);
        return user.get();
    }
    public String saveUser(@RequestBody User user){
        userRepository.save(user);
        return "success to add user";
    }
    public String updateUser(@RequestBody User user){
        userRepository.deleteById(user.getId());
        userRepository.save(user);
        return "success to update user";
    }
    public String deleteUser(@PathVariable(value="id") int id){
        userRepository.deleteById(id);
        return "success to delete user";
    }
}

7、jpa实现数据库读写

package com.example.demo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;
@Api(value = "JPA 用户操作")
@RestController
@RequestMapping("/jpa")
public class JpaUserController {
    @Autowired
    private UserService userService;
    @ApiOperation(value = "初始化", notes = "/init")
    @GetMapping("/init")
    public void  init() {
        for (int id =1000;id<1010;id++)
        {
            User u = new User();
            u.setName("name"+id);
            u.setAge(id % 10);
            saveUser(u);
        }
    }
    @ApiOperation(value = "获取用户列表", notes = "/list")
    @GetMapping("/list")
    public List<User> getUser() throws SQLException {
        return userService.getUser();
    }
    @ApiOperation(value = "获取用户", notes = "/user")
    @GetMapping("/user")
    public User getUser(@ApiParam(value = "获取单个用户", required = true) @RequestParam int id)  throws SQLException {
        return userService.getUser(id);
    }
    @ApiOperation(value = "保存用户", notes = "/user")
    @PostMapping(value = "/user")
    public String saveUser(@RequestBody User user){
        return userService.saveUser(user);
    }
    @PutMapping(value = "/user")
    public String updateUser(@RequestBody User user){
        return  userService.updateUser(user);
    }
    @DeleteMapping(value = "/user/{id}")
    public String deleteUser(@PathVariable(value="id") int id){
        return userService.deleteUser(id);
    }
}

创建好后,项目结构如下:

 

8、测试结果

在浏览器中运行

http://localhost:8080/jpa/init

数据库结果:

 


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
10天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
42 15
|
18天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
112 1
|
21天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
85 4
|
24天前
|
SQL Java 数据库
Spring Boot与Flyway:数据库版本控制的自动化实践
【10月更文挑战第19天】 在软件开发中,数据库的版本控制是一个至关重要的环节,它确保了数据库结构的一致性和项目的顺利迭代。Spring Boot结合Flyway提供了一种自动化的数据库版本控制解决方案,极大地简化了数据库迁移管理。本文将详细介绍如何使用Spring Boot和Flyway实现数据库版本的自动化控制。
23 2
|
1月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务提示:使用环境变量抽象数据库主机名
Spring 微服务提示:使用环境变量抽象数据库主机名
41 1
|
1月前
|
SQL Java 数据库
Springboot+spring-boot-starter-data-jdbc实现数据库的操作
本文介绍了如何使用Spring Boot的spring-boot-starter-data-jdbc依赖来操作数据库,包括添加依赖、配置数据库信息和编写基于JdbcTemplate的数据访问代码。
51 2
|
1月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
1月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
7天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
23 1