重新组织本章内容

This commit is contained in:
many2many 2024-11-05 11:00:08 +08:00
parent e2b3d0c76f
commit 6cfb52eb1b

View File

@ -177,9 +177,105 @@ public class JdbcCrudExample {
ResultSet rs = pstmt.executeQuery(); ResultSet rs = pstmt.executeQuery();
``` ```
### 6.4 事务管理(了解) ### 6.4 ORM(了解)
#### 6.4.1 ORM基本概念
- **定义**: ORM (Object-Relational Mapping) 是一种编程技术,用于将对象模型映射到关系型数据库模型。
- **目的**: 简化数据库操作,提高开发效率。
#### 6.4.2 常见ORM框架介绍
- **JPA (Java Persistence API)**
- **定义**: JPA 是Java EE标准的一部分提供了一种对象持久化机制。
- **特点**: 支持实体管理和生命周期管理。
- **Hibernate**
- **定义**: Hibernate 是一个流行的ORM框架实现了JPA规范。
- **特点**: 提供了强大的映射能力和缓存机制。
- **MyBatis**
- **定义**: MyBatis 是一个半自动的ORM框架提供了SQL查询的灵活性。
- **特点**: 支持动态SQL和存储过程。
#### 6.4.1 事务管理的基本概念 #### 6.4.3 JPA
> JPA的全称是Java Persistence API 即Java 持久化API是SUN公司推出的一套基于ORM的规范内部是由一系列的接口和抽象类构成。 JPA通过注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
>
> JPA本身不是ORM框架——因为JPA并未提供ORM实现它只是制订了ORM规范、API接口具体实现则由服务厂商来提供实现。
> 在Spring Boot中我们可以使用Spring Data JPA库来实现JPA。Spring Data JPA通过提供一系列接口和依赖注入的实现来简化与JPA的交互同时提供了自动配置和默认规则使得应用程序无需编写大量的代码就能实现数据的访问和操作。
![spring data jap](./resources/imgs/spring-data-jpa.png)
##### 理解实体类
在面向对象编程中,实体类是指具有某种功能或者意义的对象,可以是一个人、一件物品、一个地点、一项服务等。实体类通常由多个属性(字段)组成,并且可以具有多个操作(方法),来处理这些属性的修改、获取、设置等。
> 在ORM框架中实体类通常是指与数据库表相关联的Java类用于存储数据库表中的数据并提供了对这些数据进行操作的方法。这个类的所有属性通常与该表中的列相对应并具有相同的类型和名称。
下面是一个使用Java语言定义的User实体类的例子
```java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
// getter and setters omitted for brevity
}
```
在此类定义中,使用@Entity和@Table注释来指定该类映射到数据库中的哪个表。该类中的id、username和password字段分别对应数据库表中的id、username和password列并使用@Column注释指定每个字段与表中的列之间的映射关系。在此示例中还使用@Id和@GeneratedValue注释表示id字段是主键自动递增产生。
##### 使用spring data jpa实现数据库访问层
在Spring Boot中Repository层是数据访问层的一种实现方式。它是一个在数据访问层中专注于对数据库进行访问、操作和管理的接口。
[
Repository层通常使用ORM框架例如Hibernate、MyBatis来与数据库进行交互并将实体类映射到数据库表中。Repository层的目标是隐藏与底层数据存储相关的细节使开发人员仅需关注业务逻辑并提供可扩展性和松散耦合性。
下面是一个简单的例子演示如何在Spring Boot中创建一个UserRepository]()
```java
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
> 上述代码定义了一个UserRepository接口该接口继承了JpaRepository并特定了实体类为User主键类型为Long。UserRepository中还定义了根据用户名查询用户信息的findByUsername方法。
> 在此例中我们使用JpaRepository提供的方法来实现基本的CRUD操作同时自定义findByUsername方法以满足我们的业务需求。
##### JpaRepository
JpaRepository接口继承了PagingAndSortingRepository和CrudRepository两个接口它包含了CRUD方法和分页/排序方法等常用操作如save、findById、findAll、deleteById和flush等。以下是JpaRepository的一些常用方法
- findOne根据主键查询单个实体。
- findById根据主键查询单个实体返回Optional类型结果。
- save保存或更新实体。
- deleteById根据主键删除实体。
- findAll查询所有实体列表。
- count统计实体数量。
- existsById判断是否存在指定主键的实体。
- flush立即将持久化上下文的挂起状态写入数据库。
JpaRepository还支持自定义查询方法这可以通过在接口中添加自定义方法来实现。自定义查询方法应使用@Query注解具有灵活性和可扩展性例如
```java
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.username = ?1 AND u.age = ?2")
List<User> findByUsernameAndAge(String username, Integer age);
}
```
以上代码中我们自定义了一个查询方法findByUsernameAndAge使用@Query注解指定查询语句。参数值通过?1和?2进行占位并传入同时需要注意复合查询之间的关系。
### 6.5 事务管理(了解)
#### 6.5.1 事务管理的基本概念
在计算机科学中特别是在数据库管理和分布式计算领域事务Transaction是一种基本的操作单位它确保了一系列操作要么全部成功要么全部失败。事务的概念是数据库管理系统DBMS中用来保证数据完整性和一致性的重要机制之一。 在计算机科学中特别是在数据库管理和分布式计算领域事务Transaction是一种基本的操作单位它确保了一系列操作要么全部成功要么全部失败。事务的概念是数据库管理系统DBMS中用来保证数据完整性和一致性的重要机制之一。
@ -190,7 +286,7 @@ public class JdbcCrudExample {
- **隔离性 (Isolation)**: 事务之间是隔离的,不会相互影响。 - **隔离性 (Isolation)**: 事务之间是隔离的,不会相互影响。
- **持久性 (Durability)**: 一旦事务提交,它的效果是持久的。 - **持久性 (Durability)**: 一旦事务提交,它的效果是持久的。
#### 6.4.2 Spring事务管理器 #### 6.5.2 Spring事务管理器
- **定义**: Spring提供了多种事务管理器如`DataSourceTransactionManager`。 - **定义**: Spring提供了多种事务管理器如`DataSourceTransactionManager`。
- **示例**: - **示例**:
```java ```java
@ -204,7 +300,7 @@ public class JdbcCrudExample {
} }
``` ```
#### 6.4.3 使用@Transactional进行声明式事务管理 #### 6.5.3 使用@Transactional进行声明式事务管理
- **定义**: 使用@Transactional注解来声明式地管理事务简化了事务控制代码。 - **定义**: 使用@Transactional注解来声明式地管理事务简化了事务控制代码。
- **示例**: - **示例**:
```java ```java
@ -224,7 +320,7 @@ public class JdbcCrudExample {
} }
``` ```
#### 6.4.4 使用编程式事务管理 #### 6.5.4 使用编程式事务管理
- **定义**: 通过编程的方式显式地管理事务,适用于需要更细粒度控制事务的情况。 - **定义**: 通过编程的方式显式地管理事务,适用于需要更细粒度控制事务的情况。
- **示例**: - **示例**:
```java ```java
@ -253,26 +349,3 @@ public class JdbcCrudExample {
} }
``` ```
### 6.5 ORM(了解)
#### 6.5.1 ORM基本概念
- **定义**: ORM (Object-Relational Mapping) 是一种编程技术,用于将对象模型映射到关系型数据库模型。
- **目的**: 简化数据库操作,提高开发效率。
#### 6.5.2 常见ORM框架介绍
- **JPA (Java Persistence API)**
- **定义**: JPA 是Java EE标准的一部分提供了一种对象持久化机制。
- **特点**: 支持实体管理和生命周期管理。
- **Hibernate**
- **定义**: Hibernate 是一个流行的ORM框架实现了JPA规范。
- **特点**: 提供了强大的映射能力和缓存机制。
- **MyBatis**
- **定义**: MyBatis 是一个半自动的ORM框架提供了SQL查询的灵活性。
- **特点**: 支持动态SQL和存储过程。
### 6.6 NoSQL数据库(了解)
#### 6.6.1 MongoDB介绍
- **定义**: MongoDB 是一个文档型NoSQL数据库使用JSON-like文档存储数据。
- **特点**: 高性能、高可用性、易于水平扩展。
#### 6.6.2 Redis介绍
- **定义**: Redis 是一个开源的键值存储系统,支持多种数据结构。
- **特点**: 高性能、低延迟、持久化支持。
- **使用**: 存储会话数据、缓存、计数器等。