Java持久性API
Object-Relational元数据
在 persistence 包中定义的API本身
JPA避免使用SQL的特定于数据库的方言编写DDL。取而代之的是,它允许以XML或使用Java注解进行映射。
JPA允许我们避免用SQL的数据库专用方言编写DML。
JPA允许我们完全不使用任何DML语言来保存和加载Java对象和图形。
当我们需要执行查询JPQL时,它允许我们用Java实体而不是(本机)SQL表和列来表达查询。
这是一个功能强大的存储库和自定义的对象映射抽象。
它支持跨商店持久性。这意味着一个实体可以部分存储在MySQL和Neo4j(图形数据库管理系统)中。
它从查询方法名称动态生成查询。
域基类提供基本属性。
它支持透明审核。
集成自定义存储库代码的可能性。
通过自定义名称空间很容易与Spring Framework集成。
Persistence: 这是一个包含用于获取EntityManagerFactory实例的静态方法的类。
EntityManagerFactory: 是EntityManager的工厂类。它创建和管理EntityManager的多个实例。
EntityManager: 。它是一个界面。它控制对对象的持久性操作。它适用于Query实例。
Entity: 实体是作为记录存储在数据库中的持久性对象。
Persistence Unit: 它定义了一组所有实体类。在应用程序中,EntityManager实例对其进行管理。一组实体类表示包含在单个数据存储中的数据。
EntityTransaction: 它与EntityManager类具有一对一关系。对于每个EntityManager,操作都由EntityTransaction类维护。
Query: 该接口由每个JPA供应商实现,以获取符合条件的关系对象。
EntityManager和EntiyTransaction之间的关系是一对一。每个EntityManager操作都有一个EntityTransaction实例。
EntityManageFactory和EntiyManager之间的关系是一对多。这是EntityManager实例的工厂类。
EntityManager和Query之间的关系是一对多。我们可以使用EntityManager类的实例执行任意数量的查询。
EntityManager和Entity之间的关系是一对多。 EntityManager实例可以管理多个实体。
Java 8,数据和时间API
AttributeConvertes中的CDI注入
它使注解@Repeatable
JPA | Hibernate |
JPA是用于在Java应用程序中映射关系数据的 Java规范。 | Hibernate是一个用于处理数据持久性的 ORM框架。 |
JPA不提供任何实现类。 | 它提供了实现类。 |
它使用称为 JPQL (Java持久性查询语言)的平台无关的查询语言。 | 它使用自己的称为 HQL 的查询语言(Hibernate查询语言)。 |
它在 javax.persistence 包中定义。 | 它在 org.hibernate 包中定义。 |
它在 Hibernate,EclipseLink 等各种ORM工具中实现。 | Hibernate是JPA的提供者。 |
JPA使用 EntityManager 处理数据的持久性。 | 在Hibernate中,使用 Session 处理数据的持久性。 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.2.2.RELEASE</version> </dependency>
易于安装,部署和使用。
它基于Java,JDBC和SQL标准。
它提供了一个嵌入式JDBC驱动程序,可让我们将Derby嵌入任何基于Java的解决方案中。
它还通过Derby Network Client JDBC驱动程序和Derby Network Server支持客户机/服务器模式。
<dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <scope>runtime</scope> </dependency>
定义三个变量 id, name, and email。
生成Getter和Setter。
右键单击文件-> Source-> Generate Getter和Setters
定义默认的构造函数。
使用注解 @Entity将类标记为Entity。
使用注解 @Id将 Id 标记为主键。
package com.lidihuo.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
使用注解 @RestController 将类标记为控制器。
使用注解 @Autowired 自动连接类 UserService 。
我们定义了两个映射,一个映射用于获取所有用户,另一个映射用于添加用户。
package com.lidihuo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.lidihuo.model.UserRecord; import com.lidihuo.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("/") public List<UserRecord> getAllUser() { return userService.getAllUsers(); } @RequestMapping(value="/add-user", method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } }
通过使用注解 @Service将该类标记为服务。
自动连接 UserRepository
定义方法 getAllUsers(),该方法返回以下列表:
定义另一个方法名称 addUser(),以保存用户记录。
package com.lidihuo.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.lidihuo.model.UserRecord; import com.lidihuo.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List<UserRecord> getAllUsers() { List<UserRecord>userRecords = new ArrayList<>(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } }
package com.lidihuo.repository; import org.springframework.data.repository.CrudRepository; import com.lidihuo.model.UserRecord; public interface UserRepository extends CrudRepository<UserRecord, String> { }
package com.lidihuo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } }
选择 POST
调用URL http://localhost:8080/add-user。
点击Body
选择Content-Type作为JSON (application/json)。
将要插入的数据插入数据库中。我们插入了以下数据:
{ "id": "001", "name": "Tom", "email": "tom@gmail.com" }
点击发送按钮。