iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java之jpa入门教程讲解
  • 540
分享到

Java之jpa入门教程讲解

2024-04-02 19:04:59 540人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

JPA快速入门介绍 一:什么是JPA JPA的英文全称是Java Persistenceapi, 目的是给Java开发者提供对象关系映射工具用于在 Java应用程序开发中来管理关系数

JPA快速入门介绍

一:什么是JPA

JPA的英文全称是Java Persistenceapi, 目的是给Java开发者提供对象关系映射工具用于在

Java应用程序开发中来管理关系数据(RDBMS)。JavaPersistence 包含下面三个部分:

  1. Java持久化API
  2. JPA查询语言
  3. 对象关系映射元数据

二:JPA有哪些框架提供了的实现

当前JPA提供厂商有Hibernate, Apache, Eclipse Link等,Google云计算平台 AppEngine也使

用了JPA作为持久层。JPA作为持久层框架有如下优点:

  1. 简单易用,帮助开发者提供了生产率
  2. 便于维护,减低了维护成本
  3. 学习成本相对比较低。

但是JPA的缺点也是显而易见,JPA作为持久层有如下缺点:

  1. 将语言与数据库混在一起,导致数据改动以后,配置文件必须更新
  2. 对与多数据与大数据量处理很容易产生性能问题。
  3. 过度封装,导致错误查找相对与JDBC等传统开发技术而言更加困难

三:标准的JPA规范JSR粗略解读

JPA的最新规范为jsR Java PersistenceAPI Version 2.0

Entity Class – 实体类,必须使用注解@entity标明,同时必须有一个无参数的构造函数,而

且无参数构造函数必须为public或者protected,如果一个entity class被标记为final将导致

出错。

EntityManager – 实体管理者,管理Entity实例的整个生命周期,而且使用Query API来查询

实体与他们的persist状态。

Query Language – 基于字符串的查询语句,用来查询实体(Entity)与他们的状态。

MetaModel API – 通过EntityManagerFactory或者EntityManager的getMetamodel()方法获取,

查看persistence-unit的信息。

实体管理者与持久化上下文(Entity Manager and Persistence contexts)

Persistence Contexts – 一个被管理的实体的实例集合,在一个持久化上下文中的所有实例都

由Entity Manager来管理它们整个生命周期。

持久化单元(Persistence-Unit) – 一个持久化单元是个逻辑分组包括以下部分:

  • 一个实体管理者工厂及它的实体管理者
  • 被管理的class集合,在persistence unit配置文件中定义
  • 映射元数据– 注解定义或者xml定义匹配的类      
  • ORM元数据(MetaData forObject/Relational Mapping) – 坦白的说就annotation的各种解释与使用。

详细了解请阅读oracle官方文档 - 《persistence-2_0-final-spec》pdf文档。

四:JPA简单实例说明

1.      使用ObjectDB作为数据库,关于ObjectDB请参考Http://www.objectdb.com/

2.      参考了objectDB的例子,代码几乎没有改动,文档说明参见这里:

http://www.objectdb.com/tutorial/jpa/eclipse/WEB

3.      一个可运行的JPA实例源代码:

entity class:


package com.gloomyfish.jpa.tutorial;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Point implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    private long id;

    private int x;
    private int y;

    public Point() {
    }

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Long getId() {
        return id;
    }

    public int getX() {
         return x;
    }

    public int getY() {
         return y;
    }

    @Override
    public String toString() {
        return String.format("(%d, %d)", this.x, this.y);
    }
}

Main Test JPA;


package com.gloomyfish.jpa.tutorial;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

public class JPAMain {
    public static void main(String[] args) {
        // Open a database connection
        // (create a new database if it doesn't exist yet):
        EntityManagerFactory emf =
            Persistence.createEntityManagerFactory("$objectdb/db/points.odb");
        EntityManager em = emf.createEntityManager();

        // Store 1000 Point objects in the database:
        long startTime = System.currentTimeMillis();
        em.getTransaction().begin();
        for (int i = 0; i < 10; i++) {
            Point p = new Point(i, i);
            em.persist(p);
        }
        em.getTransaction().commit();
        long endTime = System.currentTimeMillis();
        System.out.println("save time = " + (endTime - startTime));
        // Find the number of Point objects in the database:
        Query q1 = em.createQuery("SELECT COUNT(p) FROM Point p");
        System.out.println("Total Points: " + q1.getSingleResult());

        // Find the average X value:
        Query q2 = em.createQuery("SELECT AVG(p.x) FROM Point p");
        System.out.println("Average X: " + q2.getSingleResult());

        // Retrieve all the Point objects from the database:
        TypedQuery<Point> query =
            em.createQuery("SELECT p FROM Point p", Point.class);
        List<Point> results = query.getResultList();
        for (Point p : results) {
            System.out.println(p);
        }

        // Close the database connection:
        em.close();
        emf.close();
    }
}

到此这篇关于Java之jpa入门教程讲解的文章就介绍到这了,更多相关Java之jpa内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java之jpa入门教程讲解

本文链接: https://www.lsjlt.com/news/132256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java之jpa入门教程讲解
    JPA快速入门介绍 一:什么是JPA JPA的英文全称是Java PersistenceAPI, 目的是给Java开发者提供对象关系映射工具用于在 Java应用程序开发中来管理关系数...
    99+
    2024-04-02
  • React组件化学习入门教程讲解
    目录模块化模块模块化组件化组件组件化函数式组件创建函数组件Props参数传递(重点)复合函数组件类式组件创建实例用户自定义组件模块化 模块 理解:向外提供特定功能的js程序,一般就是...
    99+
    2024-04-02
  • SpringBoot入门系列之JPA mysql
    一,准备工作,建立spring-boot-sample-mysql工程http://start.spring.io/     A、Artifact中输入spring-boot-sample-MySQL...
    99+
    2023-05-31
    spring boot jpa
  • python之selenium入门教程
    selenium,一个第三方库,可以通过给driver发送命令来操作浏览器,以达到模拟人操作浏览器,实现网页自动化、测试等,减少了重复性工作。 selenium的工作的基本架构如下: 安装 本文是在...
    99+
    2023-09-11
    python selenium
  • Java JDBC使用入门讲解
    目录1、JDBC概述1.1、JDBC的概念1.2、JDBC的本质1.3、JDBC的好处2、JDBC快速入门2.1、编写代码2.2、完整案例前言:本节我们开始学习JDBC,JDBC的基...
    99+
    2022-12-08
    Java JDBC Java JDBC是什么
  • MySQL之索引(入门级讲解)
    目录 一.索引的概念   1.1索引的简介  1.2.索引的优缺点 二.MySQL索引语法 2.1查看索引 2.2创建索引 2.2.1 创建表时创建索引  2.2.2存在的表上创建索引 2.3删除索引 三.索引的数据结构       3.1...
    99+
    2023-08-31
    mysql 数据库
  • C++入门之模板基础讲解
    目录前言引入模板函数模板模板的匹配原则模板的显示调用类模板注意1注意2总结 前言 今天博主将要介绍的内容是–模板,他在C++中具有非常重要的位置.至于什么是模板呢?我们请看...
    99+
    2024-04-02
  • Android入门之IntentService的使用教程详解
    目录开篇IntentService课程目标代码核心设计service注册Service类-LongWaitingService主类-MainActivity.java运行效果开篇 在...
    99+
    2022-12-08
    Android IntentService使用 Android IntentService
  • Java之MyBatis入门详解
    目录一、三层架构Java中的三层架构指(1)三层对应的包(2)三层中类的交互(3)三层对应的处理框架(4)使用三层架构有点(5)缺点二、MyBatis1、官方简介2、百度基本信息&n...
    99+
    2022-12-21
    Java MyBatis入门 Java MyBatis MyBatis入门
  • Java 泛型超详细入门讲解
    目录1、什么是泛型2、泛型是怎么编译的泛型的编译机制:擦除机制1、什么是泛型 泛型其实就是将类型作为参数传递,泛型允许程序员在编写代码时使用一些以后才指定的类型 ,在实例化该类时将想...
    99+
    2024-04-02
  • SpringBoot入门教程详解
    目录一、SpringBoot简介二、SpringBoot入门案例1、创建项目2、编写 Controller 类3、启动项目4、使用 Postman 测试三、SpringBoot VS...
    99+
    2024-04-02
  • Redis入门教程详解
    目录Redis一、Redis基本数据结构1. 字符串 (String)2. 散列(hash)3. 列表(list)4. 集合(Set)5. 有序集合(sorted set)二、Red...
    99+
    2024-04-02
  • Python入门教程之运算符重载详解
    目录如何重载Python中的运算符在 Python中重载比较运算符重载相等和小于运算符用于运算符重载的 Python 魔术方法或特殊函数二元运算符比较运算符赋值运算符一元运算符运算符...
    99+
    2024-04-02
  • Java多线程之Disruptor入门
    目录一、Disruptor简介二、浅聊Disruptor的核心三、Disruptor使用3.1pom.xml3.2事件Event3.3EventFactory3.4EventHand...
    99+
    2024-04-02
  • Android入门之TextClock的使用教程
    目录介绍课程例子UI主界面代码运行效果介绍 TextClock是在Android 4.2(API 17)后推出的用来替代DigitalClock的一个控件。 TextClock可以以...
    99+
    2022-11-16
    Android TextClock使用 Android TextClock
  • Android入门之Toast的使用教程
    目录介绍课程目标项目结构前端代码view_toast_custom.xmlactivity_main.xml后端代码MainActivity.java介绍 本篇带来的是: Andro...
    99+
    2022-11-21
    Android Toast使用 Android Toast
  • Android入门之Fragment的使用教程
    目录简介Fragment是什么课程目标项目结构全局静态常量colors.xmlstrings.xml项目中用到的图片用于定义4个按钮按下去和没有按下去时状态的Selector XML...
    99+
    2022-12-15
    Android Fragment使用 Android Fragment
  • Drupal8入门教程之安装部署
    Drupal 8是一个开源的内容管理系统(CMS),用于构建和管理网站。在开始使用Drupal 8之前,您需要先安装和部署它。下面是...
    99+
    2023-09-21
    Drupal8
  • Android入门之ProgressBar的使用教程
    目录介绍课程目标我们先来看我们的主界面UIMainActivity.java介绍 Android里的ProgressBar默认为一个不断转圈的圆,它也可以自定义,但是如我在上一篇里所...
    99+
    2022-11-13
    Android ProgressBar使用 Android ProgressBar
  • CocosCreator入门教程之网络通信
    网络通信概况 开发一个网络游戏,难免要处理网络通信。有几点问题需要注意: 1.服务端为了快速开发可能前期使用http通信,后面再改成websocket/socket。 2.同时存在h...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作