我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用JPA传递参数的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用JPA传递参数的方法

JPA传递参数的方法

第一种

    
    @Query(value = "select * from t_user where t_age > :age", nativeQuery = true)
    List<UserEntity> listAgeMoreThan(@Param("age") Integer age);
}

第二种

@Query(value = "select * from t_user where t_age > ?1", nativeQuery = true)
List<UserEntity> listAgeMoreThan(Integer age);

浅谈JPA优缺点

一.JPA的理解

JPA的总体思想和现有hibernate、TopLink,JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

二.JPA 实体生命周期理解和总结

  • New:瞬时对象,尚未有id,还未和Persistence Context建立关联的对象。
  • Managed:持久化受管对象,有id值,已经和Persistence Context建立了关联的对象。
  • Datached:游离态离线对象,有id值,但没有和Persistence Context建立关联的对象。
  • Removed:删除的对象,有id值,尚且和Persistence Context有关联,但是已经准备好从数据库中删除
  • Managed状态下的数据保存,更新以及删除数据下的Removed状态,数据都不会立即更新到数据库,只有当你事务提交或者em.flush(),才会立即更新到数据库。
  • Datached的状态,可以调用em.merge()方法,这个方法会根据实体类的id来更新数据库数据,这时实体类变成了Managed(托管)状态。

三.为什么要使用JPA?

在说为什么要使用JPA之前,我们有必要了解为什么要使用ORM技术。

ORM 是Object-Relation-Mapping,即对象关系影射技术,是对象持久化的核心。ORM是对JDBC的封装,从而解决了JDBC的各种存在问题:

繁琐的代码问题

用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错。例如:PreparedStatementpstmt=con.prepareStatment(“insert into accountvalue(?,?,?,?,?,?,?,?,?)”);

ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。

数据库对象连接问题

关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。在数据库对象更新的时候,采用JDBC编程,必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很费时费力的过程。

ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。

系统架构问题

JDBC属于数据访问层,但是使用JDBC编程时,必须知道后台是用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息。

使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter和 Setter方法,即可实现对后台数据库的操作,程序员不必知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。

性能问题

采用JDBC编程,在很多时候存在效率低下的问题。例如程序将向后台数据库发送1000次SQL语句执行请求,运行效率较低。

采用ORM技术,ORM框架将根据具体数据库操作需要,会自动延迟向后台数据库发送SQL请求,ORM也可以根据实际情况,将数据库访问操作合成,尽量减少不必要的数据库操作请求。

JPA的作用

JPA的英文全称是Java PersistenceAPI, 目的是给Java开发者提供对象关系映射工具用于在Java应用程序开发中来管理关系数据(RDBMS)。如下特点:

标准化

JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问 API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

对容器级特性的支持

JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

简单易用,集成方便

JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释;JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的 掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。

可媲美JDBC的查询能力

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成 是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

支持面向对象的高级特性

JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

JPA优势

可持久化Java对象。JPA能够直接持久化复杂的Java对象,并能够使用JPQL语言进行复杂的查询。JPQL是JPA专用的查询语言,是类似于SQL的面向对象的查询语言。

使用简单。JPA使用注释(Annotation)定义Java对象与关系数据库之间的映射,而传统的ORM多使用xml配置文件。JPA使用起来比ORM要方便。使用JPA不用关注底层使用什么数据库。

规范标准化。JPA是JCP组织发布的,是Java官方规定的统一的API。目前已经有多种框架实现JPA标准。使用了JPA的系统可以自由选择遵循JPA标准的框架,并能够自由更换。

事务性、大数据量。JPA底层使用关系数据库进行存储,因此具备关系数据库的特点,例如事务性、数据完整性、并发访问、大数据量等。

与其他持久化技术相比,JPA有很大的技术优势。表列出了JPA与其他持久化技术的比较。

JPA的劣势

由于非常新,JPA 规范可能还需要进过重要发展才会变得很稳定。

JPA 是一个规范而不是一个产品。需要提供商提供一个实施,才能获得这些基于标准的 API 的优势。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用JPA传递参数的方法

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

下载Word文档

猜你喜欢

Shell 参数传递的使用方法

我们可以在执行 Shelwww.cppcns.coml 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 具体实例:
2023-05-12

Shell参数传递的使用方法

本文主要介绍了Shell参数传递的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-19

php函数参数的传递方法

这篇文章给大家分享的是有关php函数参数的传递方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在调用函数时,需要向函数传递参数,被传入函数的参数称为实参,而函数定义的参数称为形参。而向函数传递参数的方式有四种,
2023-06-14

C++ 函数参数的传递方式详解:值传递和引用传递

c++++ 参数传递方式分为值传递和引用传递。值传递创建函数参数副本,不影响原变量;引用传递直接操作原变量。选择方式取决于需求:保护原变量使用值传递,修改原变量或提高效率使用引用传递。C++ 函数参数的传递方式详解:值传递和引用传递在 C
C++ 函数参数的传递方式详解:值传递和引用传递
2024-04-12

Spring Data JPA中in条件参数的传递方式有哪些

这篇文章主要介绍Spring Data JPA中in条件参数的传递方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!关于Spring Data JPA中自定义sql 条件的 in参数记录此文做一个记录,以便以后
2023-06-15

将方法参数传递给函数

在PHP开发中,将方法参数传递给函数是一个常见的需求。通过将参数传递给函数,我们可以在函数内部对参数进行操作和处理,从而实现更加灵活和可复用的代码。在本文中,php小编百草将为大家介绍如何正确地将方法参数传递给函数,并分享一些实用的技巧和注
将方法参数传递给函数
2024-02-14

php函数间的参数传递(值传递/引用传递)

函数间的参数传递包括值传递和引用传递,详细示例接下来为大家详细介绍下,感兴趣的朋友不要错过
2022-11-15

java传递参数的方法有哪些

在Java中,传递参数的方法有以下几种:1. 值传递:基本数据类型(如int、char、boolean等)和字符串类型(String)都是以值传递的方式进行参数传递。在方法内对参数的修改不会影响原始值。2. 引用传递:对于引用类型(如数组、
2023-09-15

php函数引用传递参数的实例方法

本篇内容介绍了“php函数引用传递参数的实例方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先来看一个小例子,便于我们理解引用传递。
2023-06-20

Django URL传递参数的方法总结

1 无参数情况 配置URL及其视图如下:(r'^hello/$', hello)def hello(request):return HttpResponse("Hello World")访问http://127.0.0.1:8000/hel
2022-06-04

iframe参数传递的方法是什么

在HTML中,可以使用iframe标签来嵌套其他网页。要传递参数给嵌套的网页,可以使用以下方法:1. URL查询字符串:可以将参数作为URL的查询字符串附加在iframe的src属性中。例如:```html```在嵌套的网页中,可以使用Ja
2023-09-20

shell传参并将参数传递给sql文件的方法

如下所示: 调用代码: sh /tmp/t.sh 20160808 echo $1 cat /tmp/t.sql | sedyLEEDe '
2022-06-04

golang函数方法作为参数传递

go 函数方法作为参数传递:go 函数可作为其他函数的参数传递。可以将代码组织成模块化且可重用的片段。实战案例:可以使用打印函数作为参数打印切片元素。Go 语言中函数方法作为参数的传递Go 中的函数是一个一等公民,因此它们可以作为其他函数
golang函数方法作为参数传递
2024-04-22

Python中的函数参数传递方法*args与**kwargs怎么使用

本文小编为大家详细介绍“Python中的函数参数传递方法*args与**kwargs怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的函数参数传递方法*args与**kwargs怎么使用”文章能帮助大家解决疑惑,下面跟
2023-07-05

使用React.forwardRef传递泛型参数

这篇文章主要介绍了使用React.forwardRef传递泛型参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-20

使用response.sendRedirect()传递隐藏参数

在使用`response.sendRedirect()`方法重定向到另一个页面时,无法直接传递隐藏参数。但是可以通过在URL中附加查询字符串参数的方式来传递参数。例如,假设我们想要重定向到`newPage.jsp`页面,并传递一个名为`hi
2023-09-27

如何使用OLEDBCommand传递参数

使用OLEDBCommand传递参数的步骤如下:1. 创建一个OLEDBConnection对象并打开连接:```OleDbConnection connection = new OleDbConnection(connectionStri
2023-09-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录