服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 使用JPA传递参数的方法

使用JPA传递参数的方法

2023-02-23 13:28一颗大大大萝卜呗 Java教程

这篇文章主要介绍了使用JPA传递参数的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JPA传递参数的方法

第一种

?
1
2
3
4
5
6
7
8
9
10
11
    /**
     *  通过年龄来查询数据。
     *  使用@Query来配置自己定义的SQL,后面的参数nativeQuery = true才是表明使用了原生的sql
     *  如果不配置,默认为false,那么将使用HQL查询方式。
     *
     * @param age
     * @return
     */
    @Query(value = "select * from t_user where t_age > :age", nativeQuery = true)
    List<UserEntity> listAgeMoreThan(@Param("age") Integer age);
}

第二种

?
1
2
@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?

在说为什么要使用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的框架和接口也都非常简单,没有太Tuohang别的规则和设计模式的要求,开发者可以很容易的 掌握。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 规范可能还需要进过重要发展才会变得很稳定。

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_41967899/article/details/100727995

延伸 · 阅读

精彩推荐
  • Java教程springboot 1.5.2 集成kafka的简单例子

    springboot 1.5.2 集成kafka的简单例子

    本篇文章主要介绍了springboot 1.5.2 集成kafka的简单例子 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Xiao.jf10462021-01-29
  • Java教程java设计模式:原始模型模式

    java设计模式:原始模型模式

    这篇文章主要为大家详细介绍了Java设计模式之Prototype原型模式的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    二当家的白帽子11352021-11-16
  • Java教程Java Socket编程实例(三)- TCP服务端线程池

    Java Socket编程实例(三)- TCP服务端线程池

    这篇文章主要讲解Java Socket编程中TCP服务端线程池的实例,希望能给大家做一个参考。 ...

    kingxss5682020-05-17
  • Java教程企业级Kubernetes管理平台Wayne功能特性介绍

    企业级Kubernetes管理平台Wayne功能特性介绍

    这篇文章主要为大家介绍了企业级Kubernetes管理平台Wayne的功能特性及架构设计,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    kl5622022-08-09
  • Java教程Java四种线程池的使用详解

    Java四种线程池的使用详解

    本篇文章主要介绍了Java四种线程池的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    cuisuqiang2582020-12-23
  • Java教程Java中BufferedReader与Scanner读入的区别详解

    Java中BufferedReader与Scanner读入的区别详解

    这篇文章主要介绍了Java中BufferedReader与Scanner读入的区别详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    知行流浪4322022-03-07
  • Java教程Java 全面系统介绍反射的运用

    Java 全面系统介绍反射的运用

    准备入手学习java的安全了,感觉这也是一个大的趋势,想着尽早进入到java安全的探索中,在反序列化链的学习之前,需要先学习反射,不多说了,开干吧...

    huamanggg4182022-09-03
  • Java教程SpringBoot整合JWT的入门指南

    SpringBoot整合JWT的入门指南

    JWT全称是json web token,它将用户信息加密到 token 里,服务器不保存任何用户信息,服务器通过使用保存的密钥验证 token 的正确性,只要正确即通过验证,这篇文章...

    一位不透露姓名的先生4702021-09-18