Spring Boot深入学习数据访问之Spring Data JPA与Hibernate的应用

Spring Boot深入学习数据访问之Spring Data JPA与Hibernate的应用

什么是Spring Data JPA?

Spring Data JPA 是 Spring Data 一个子数据访问项目,该项目基于Spring框架为开发人员提供了一个基于JPA的工具包,方便开发人员使用JPA来访问数据库。

Spring Boot 中使用Spring Data JPA

在Spring Boot中使用Spring Data JPA非常简单,只需要通过添加Maven依赖或Gradle依赖来实现。在spring-boot-starter-data-jpa模块中已经集成了Spring Data JPA,不需要额外的配置,只需要在应用程序的配置文件中配置数据源即可。

Hibernate 的使用

Hibernate是一种ORM框架,它允许开发人员在使用Java对象时,直接映射到数据库表中。Hibernate通过对象关系映射(ORM)方式,将Java对象自动映射到数据库表上,提供了完整的CRUD操作,极大的提高了开发效率。

Spring Data JPA和Hibernate的结合使用

Spring Data JPA基于Hibernate来操作ORM,可以通过配置Spring Data JPA和Hibernate的配置来控制Hibernate的特性,实现对数据库的操作。

添加Maven依赖

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

配置数据源

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

创建实体类

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    // getters and setters
}

创建Repository接口

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

在Controller中使用Repository

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        Optional<User> user = userRepository.findById(id);
        return user.orElse(null);
    }
}

示例一:使用Spring Data JPA和Hibernate进行增删改查操作

添加依赖

<!-- mysql JDBC driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- Spring Boot -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<!-- Spring Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

编写配置文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

编写实体类

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true, length = 15)
    private String username;

    @Column(nullable = false, length = 64)
    private String password;

    @Column(nullable = false, unique = true, length = 32)
    private String email;

    @Column(nullable = false)
    private Integer activateCode;

    // getters and setters
}

编写Repository接口

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsernameAndPassword(String username, String password);

    User findByActivateCode(Integer activateCode);
}

编写Controller

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/all")
    public List<User> getAll() {
        return userRepository.findAll();
    }

    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @PostMapping("/add")
    public User add(@RequestBody User user) {
        return userRepository.save(user);
    }

    @PostMapping("/update")
    public User update(@RequestBody User user) {
        User oldUser = userRepository.findById(user.getId()).orElse(null);

        if (oldUser != null) {
            oldUser.setUsername(user.getUsername());
            oldUser.setPassword(user.getPassword());
            oldUser.setEmail(user.getEmail());
            oldUser.setActivateCode(user.getActivateCode());
            return userRepository.save(oldUser);
        }

        return null;
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        userRepository.deleteById(id);
    }
}

示例二:使用Spring Boot和Hibernate搭建RESTful API服务

添加依赖

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

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

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.10.1</version>
</dependency>

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

<dependency>
  <groupId>org.hibernate.validator</groupId>
  <artifactId>hibernate-validator</artifactId>
</dependency>

添加配置文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8080

jpa:
  database: MYSQL
  show-sql: true
  hibernate:
    ddl-auto: update

创建实体类

@Entity
@Table(name = "Book")
public class Book {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String bookName;

    private String authorName;

    public Book() {}

    public Book(String bookName, String authorName) {
        this.bookName = bookName;
        this.authorName = authorName;
    }

    // getters and setters
}

创建Repository接口

public interface BookRepository extends JpaRepository<Book, Long> {}

创建Controller

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookRepository bookRepository;

    @GetMapping("")
    public ResponseEntity<List<Book>> getAllBooks() {
        List<Book> books = bookRepository.findAll();
        return new ResponseEntity<List<Book>>(books, HttpStatus.OK);
    }

    @GetMapping("/{id}")
    public ResponseEntity<Book> getBookById(@PathVariable("id") Long id) {
        Optional<Book> book = bookRepository.findById(id);
        if (!book.isPresent()) {
            return new ResponseEntity<Book>(HttpStatus.NOT_FOUND);
        }
        return new ResponseEntity<Book>(book.get(), HttpStatus.OK);
    }

    @PostMapping("")
    public ResponseEntity<Book> addBook(@Validated @RequestBody Book book) {
        Book newBook = bookRepository.save(book);
        return new ResponseEntity<Book>(newBook, HttpStatus.CREATED);
    }

    @PutMapping("/{id}")
    public ResponseEntity<Book> updateBook(
            @PathVariable("id") Long id, @Validated @RequestBody Book book) {
        Optional<Book> optionalBook = bookRepository.findById(id);
        if (!optionalBook.isPresent()) {
            return new ResponseEntity<Book>(HttpStatus.NOT_FOUND);
        }
        Book existingBook = optionalBook.get();
        existingBook.setBookName(book.getBookName());
        existingBook.setAuthorName(book.getAuthorName());
        bookRepository.save(existingBook);
        return new ResponseEntity<Book>(existingBook, HttpStatus.OK);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteBook(@PathVariable("id") Long id) {
        Optional<Book> book = bookRepository.findById(id);
        if (!book.isPresent()) {
            return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
        }
        bookRepository.deleteById(id);
        return new ResponseEntity<Void>(HttpStatus.OK);
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot深入学习数据访问之Spring Data JPA与Hibernate的应用 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 命令提示符编译java的方法(必看篇)

    命令提示符编译Java的方法 要在命令提示符中编译Java程序,我们需要进行以下步骤: 第一步:设置Java环境变量 为了让命令提示符识别Java编译,我们需要先设置Java环境变量。 在桌面上右键点击“计算机”,然后选择“属性”; 点击“高级系统设置”; 点击“环境变量”; 在“系统变量”中,选择“新建”; 在“变量名”中输入“JAVA_HOME”,在“变…

    Java 2023年5月23日
    00
  • Java数据库连接池的几种配置方法(以MySQL数据库为例)

    让我来为您详细讲解Java数据库连接池的几种配置方法(以MySQL数据库为例)。 1. 简介 Java数据库连接池是Java程序与数据库之间的重要组件,它可以管理JDBC连接对象。在传统的JDBC编程中,每次使用数据库连接时都需要手动获取和释放连接,这样容易造成资源浪费和连接泄漏的情况。而使用数据库连接池,则可以通过预先创建一定数量的连接对象,并在需要时分配…

    Java 2023年5月19日
    00
  • springboot构造树形结构数据并查询的方法

    我会为你讲解“springboot构造树形结构数据并查询的方法”的完整攻略,以下是步骤: 1.引入依赖 首先,在pom.xml文件中引入mybatis-plus和fastjson依赖,用于操作数据库和处理Json数据。具体依赖如下: <dependencies> <dependency> <groupId>com.baom…

    Java 2023年5月20日
    00
  • 瑞吉外卖day1

    项目整体介绍 项目介绍 本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用心主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。本项目共分为3期进行开发:第一期主要实现基本需求,其中移动端应用通过…

    Java 2023年5月6日
    00
  • 用JAVA实现杨辉三角实例

    首先我们来详细讲解用JAVA实现杨辉三角的完整攻略,步骤如下: 1. 确定问题及解题思路 杨辉三角是一个数字三角形,它的每一行都是由前一行相邻两个元素相加而成。第一行只有一个数字1,接下来的每一行数字都是通过计算上一行相邻两个数字之和得到的。比如,第三行的数字是1 2 1,其中2=1+1。 我们可以通过二维数组来存储杨辉三角,并使用循环迭代计算每一行的数据。…

    Java 2023年5月19日
    00
  • Java中的Spring Security配置过滤器

    下面是关于Java中的Spring Security配置过滤器的完整攻略: 概述 Spring Security是一个基于Spring框架的安全性管理框架,通过Spring Security可以实现对系统资源的保护。在Spring Security中,Filter链是一个非常重要的组件。Spring Security通过Filter实现了对Web请求的控制。…

    Java 2023年6月3日
    00
  • SSM项目中使用拦截器和过滤器的实现示例

    下面是使用拦截器和过滤器的实现示例的攻略: 拦截器和过滤器的作用 拦截器和过滤器都是Web开发中常用的组件,在SSM项目中也可以使用它们来做许多事情,比如: 对用户请求进行预处理和后处理,比如登录验证、权限验证、日志记录等; 对用户请求进行拦截和过滤,比如防止一些不安全的请求、过滤一些敏感信息等; 修改用户请求或响应,比如对请求或响应头进行修改、对请求或响应…

    Java 2023年6月15日
    00
  • 使用springmvc运行流程分析,手写spring框架尝试

    以下是关于“使用SpringMVC运行流程分析,手写Spring框架尝试”的完整攻略,其中包含两个示例。 使用SpringMVC运行流程分析 SpringMVC是一个基于MVC模式的Web框架,它可以帮助我们快速开发Web应用程序。本文将介绍SpringMVC的运行流程。 运行流程 SpringMVC的运行流程可以分为以下几个步骤: 客户端发送请求到Disp…

    Java 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部