zoukankan      html  css  js  c++  java
  • 吴裕雄天生自然SPRINGBOOT开发实战Spring Boot JPA数据库操作

    Spring Boot JPA 是用于管理的Java规范Java应用程序中的关系数据。它允许我们访问和持久化Java对象/类与关系数据库之间的数据。 JPA遵循对象关系映射(ORM)。它是一组接口。它还提供了运行时 EntityManager API,用于处理针对数据库对象的查询和事务。它使用与平台无关的面向对象的查询语言JPQL(Java持久查询语言)。
    在持久性方面,它涵盖了三个领域:
    Java持久性API
    Object-Relational元数据
    在 persistence 包中定义的API本身
    JPA不是框架。它定义了可以在任何框架中实现的概念。
    与JDBC相比,JPA更简单,更清洁且劳动强度更低,SQL和手写映射。 JPA适用于非性能导向的复杂应用程序。与JDBC相比,JPA的主要优点在于,在JPA中,数据由对象和类表示,而在JDBC中,数据由表和记录表示。它使用POJO表示持久数据,从而简化了数据库编程。 JPA还有其他优点:
    JPA避免使用SQL的特定于数据库的方言编写DDL。取而代之的是,它允许以XML或使用Java注解进行映射。
    JPA允许我们避免用SQL的数据库专用方言编写DML。
    JPA允许我们完全不使用任何DML语言来保存和加载Java对象和图形。
    当我们需要执行查询JPQL时,它允许我们用Java实体而不是(本机)SQL表和列来表达查询。
    JPA具有以下功能:
    这是一个功能强大的存储库和自定义的对象映射抽象。
    它支持跨商店持久性。这意味着一个实体可以部分存储在MySQL和Neo4j(图形数据库管理系统)中。
    它从查询方法名称动态生成查询。
    域基类提供基本属性。
    它支持透明审核。
    集成自定义存储库代码的可能性。
    通过自定义名称空间很容易与Spring Framework集成。
    JPA体系结构
    JPA是将业务实体存储为关系实体的源。它显示了如何将POJO定义为实体以及如何通过关系管理实体。
    下图描述了JPA的类级别体系结构,该体系结构描述了JPA的核心类和接口。 javax持久性包。 JPA体系结构包含以下单元:
    Persistence: 这是一个包含用于获取EntityManagerFactory实例的静态方法的类。
    EntityManagerFactory: 是EntityManager的工厂类。它创建和管理EntityManager的多个实例。
    EntityManager: 。它是一个界面。它控制对对象的持久性操作。它适用于Query实例。
    Entity: 实体是作为记录存储在数据库中的持久性对象。
    Persistence Unit: 它定义了一组所有实体类。在应用程序中,EntityManager实例对其进行管理。一组实体类表示包含在单个数据存储中的数据。
    EntityTransaction: 它与EntityManager类具有一对一关系。对于每个EntityManager,操作都由EntityTransaction类维护。
    Query: 该接口由每个JPA供应商实现,以获取符合条件的关系对象。
    JPA是一种开源API。有各种企业供应商,例如Eclipse,RedHat,Oracle等,通过在其中添加JPA来提供新产品。有一些流行的JPA实现框架,例如 Hibernate,EclipseLink,DataNucleus 等。它也称为对象关系映射(ORM)工具。
    对象关系映射(ORM)
    在ORM中,Java对象到数据库表的映射(反之亦然)被称为对象关系映射。 ORM映射充当关系数据库(表和记录)和 Java应用程序(类和对象)之间的桥梁。
    在下面如图所示,ORM层是适配器层。它将对象图的语言适应SQL和关系表的语言
    
    ORM层存在于应用程序和数据库之间。它转换Java类和对象,以便可以在关系数据库中存储和管理它们。默认情况下,持久化的名称将成为表的名称,而字段将成为列。一旦应用程序建立,每个表行都对应一个对象。

    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.dad</groupId>
        <artifactId>9-6-jpa-01</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <parent>
            <!-- 依赖管理,引入以后在声明其它dependency的时候就不需要version -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.3.0.RELEASE</version>
            <relativePath />
        </parent>
    
        <properties>
            <!-- 声明项目配置依赖编码格式为 utf-8 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <fastjson.version>1.2.24</fastjson.version>
        </properties>
    
        <dependencies>
    
            <!-- DevTools in Spring Boot 项目热部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
    
            <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>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.apache.derby</groupId>
                <artifactId>derby</artifactId>
                <scope>runtime</scope>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    server.port =8089
    
    datasource.driver=org.apache.derby.jdbc.EmbeddedDriver
    datasource.url=jdbc\:derby\:firstdb;create\=true
    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;
        }
    }
    package com.lidihuo.model;
    
    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.model.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);
        }
    
    }
    package com.lidihuo.model;
    
    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.model.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.model;
    
    import org.springframework.data.repository.CrudRepository;
    import com.lidihuo.model.UserRecord; 
    
    public interface UserRepository extends CrudRepository<UserRecord, String> 
    {  
    }  
    package com.lidihuo.model;
    
    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);
        }
    
    }

    打开Postman,然后执行以下操作:
    选择 POST
    调用URL http://localhost:8089/add-user。
    点击Body
    选择Content-Type作为JSON (application/json)。
    将要插入的数据插入数据库中。我们插入了以下数据:
    
    {
    "id": "001",
    "name": "Tom",
    "email": "tom@gmail.com"
    }
    
    点击发送按钮。

    打开浏览器并调用URL http: //localhost: 8089。它返回我们已插入数据库中的用户。

  • 相关阅读:
    Intent的跳转和传值
    Intent传值的学习
    Activity,Window,View之间是什么关系?
    MATCH_PARENT和FILL_PARENT之间的区别?
    Activity的运行过程
    onCreate和onStart谁的开销大?
    SDKManager连不上墙外的网,列表刷新不出来怎么办?
    AndroidEclipse里的视图里想添加SDK Manager但是找不到怎么办?
    出现“Unable to resolve target 'android-XXX'”怎么处理?
    安卓进程的生命周期
  • 原文地址:https://www.cnblogs.com/tszr/p/15232384.html
Copyright © 2011-2022 走看看