JavaEE-JPA(相关概念及Spring JPA)

JPA


JPA 相关概念

ORM 框架

(Object Relational Mapping) 建立 Java 程序实体类与数据库表之间的映射关系。使用 ORM 框架进行编程 Java 程序会根据开发者配置,在运行时自动把数据对象持久化到数据库中,比直接使用 JDBC 编程更为方便和强大。

常见的 ORM 框架有 Hibernate, MyBatis 等。

JPA 规范

(Java Persistence API) Java 程序和数据库连接的 Java EE 标准,本质上是一种 ORM 规范。使用户不必在 Java 程序中书写 SQL 语句就能直接把数据对象持久化到数据库中,由数据库厂商负责具体实现。

JDBC 和 JPA 的区别
  • JDBC 是面向 SQL 的规范和接口,用户仍需要在 java 程序中书写 SQL 语句。
  • JPA 是直接面向数据对象的规范和接口,可以通过直接操作对象来实现持久化,大大简化了操作的繁杂度。

P.S. Hibernate 是符合 JPA 规范的,而 MyBatis 却不符合,因为 MyBatis 还需要书写 SQL 语句。

https://www.jianshu.com/p/c14640b63653


Spring JPA

Spring 框架中提供了对数据操作的框架 SpringData ; SpringData 框架下则提供了基于 JPA 标准操作数据的模块 SpringData JPA 。

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;

实体类

@Entity 声明实体类,自动对应数据库表(必选)

@Table(name = "AUTH_USER") 声明了数据库实体对应的表名,如果没有默认表名和实体名一致。

属性

@Id 声明属性对应数据库字段是主键。

@Column(length = 32) 用来声明实体属性的表字段的定义。

  1. name - 属性对应数据库字段名,默认和属性名称一致。
  2. length - 属性对应数据库字段长度,默认 255。
  3. 属性对应数据库字段类型会自动推断。
@Entity
@Table(name = "AUTH_USER")
public class UserDO {@Idprivate Long id;@Column(length = 32)private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}Copy to clipboardErrorCopied

运行时,系统自动将数据表给我们建好了。

我们要实现一个增加、删除、修改、查询功能的持久层服务,那么我只需要声明一个接口,这个接口继承 org.springframework.data.repository.Repository<T, ID> 接口或者他的子接口就行。这里为了功能的完备,我们继承了 org.springframework.data.jpa.repository.JpaRepository<T, ID> 接口。其中 T 是数据库实体类,ID 是数据库实体类的主键。 然后再简单的在这个接口上增加一个 @Repository 注解就结束了。

@Repository
public interface UserDao extends JpaRepository<UserDAO, id> {
}Copy to clipboardErrorCopied

UserDO userDO = new UserDO(); userDO.setId(1L); userDO.setName("风清扬");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android面试题之Kotlin常见集合操作技巧

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…

Kubernetes可视化界面之DashBoard

1.1 DashBoard Kubernetes Dashboard 是 Kubernetes 集群的一个开箱即用的 Web UI&#xff0c;提供了一种图形化的方式来管理和监视 Kubernetes 集群中的资源。它允许用户直接在浏览器中执行许多常见的 Kubernetes 管理任务&#xff0c;如部署应用、监控应用状态、执行故障排查…

用循环神经网络预测股价

循环神经网络可以用来对时间序列进行预测&#xff0c;之前我们在介绍循环神经网络RNN,LSTM和GRU的时候都用到了正弦函数预测的例子&#xff0c;其实这个例子就是一个时间序列。而在众多的时间序列例子中&#xff0c;最普遍的就是股价的预测了&#xff0c;股价序列是一种很明显的…

链表练习题

返回倒数第K个节点 快慢指针 让快指针先走k步&#xff0c;再使得快指针与慢指针同时走一步&#xff0c;这样没有开额外空间&#xff0c;空间复杂度较低。 代码实现如下&#xff1a; struct ListNode {int val;struct ListNode* next;}; int kthToLast(struct ListNode* head…

第 52 期:MySQL 半同步复制频繁报错

社区王牌专栏《一问一实验&#xff1a;AI 版》全新改版归来&#xff0c;得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询&#xff0c;表达了想试用体验 ChatDBA 的意愿&#xff0c;对此我们表示感谢 &#x1f91f;。 目前&#xff0c;ChatDBA 还在最后的准备…

el-table实现合并特定列的所有行

el-table实现合并特定列的所有行 示例&#xff1a; 在这里插入图片描述 const objectSpanMethod ({ row, column, rowIndex, columnIndex }) > {if (columnIndex 5 || columnIndex 7) {// 就是只保留第一行&#xff0c;其他直接不要&#xff0c;然后行数是列表长度if …

2024年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 下列哪个命令,可以将2024转换成’2024’ 呢?( ) A:str(2024) B:int(2024) C:float(2024) D:bool(2024) 答案:A 本题考察的是str() 语句,将数字转换成字符串用到的是str() 语句。 …

Java:IO

首 java.io中有百万计的类&#xff0c;如何找到自己需要的部分&#xff1f; 流 IO涉及到一个“流”stream的概念&#xff0c;可以简单理解成数据从一个源头到一个目的地。明白数据从哪来&#xff0c;要到哪里去&#xff0c;数据流中是字节还是字符之后&#xff0c;才能找到自…

回顾下Java中的基本数据类型以及Integer与int的区别

一、Java中的基本数据类型&#xff08;Primitive Data Types&#xff09;共有八种&#xff0c;它们分别是&#xff1a; byte&#xff1a;字节型&#xff0c;用于表示8位整数&#xff0c;取值范围从-128到127&#xff08;包括-128和127&#xff09;。 short&#xff1a;短整型&…

由于找不到d3dx9_39.dll,无法继续执行代码的5种解决方法

在现代科技发展的时代&#xff0c;电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;由于各种原因&#xff0c;我们可能会遇到一些电脑问题&#xff0c;其中之一就是“d3dx9_39.dll丢失”。这个问题可能会导致我们在运行某些游戏或应用程序时遇到错误提示&#xff0c;…

AI 生成第9篇测试文章:测试人员如何发挥自己在团队中的作用?

背景 在快速迭代的软件开发环境中&#xff0c;测试人员的角色早已超越了传统的“找bug”范畴&#xff0c;TA们成为了保证产品质量、促进团队协作、推动技术创新的重要力量。本文将深入探讨测试人员如何在团队中发挥更加全面和深入的作用&#xff0c;成为不可或缺的一环。 1. …

Vue中引入组件需要哪三步

在Vue中引入组件通常需要以下三步&#xff1a; 导入组件&#xff1a;首先&#xff0c;你需要在父组件中导入你想要使用的子组件。这通常是通过ES6的import语法完成的。 注册组件&#xff1a;接下来&#xff0c;你需要在父组件中注册这个子组件。这可以通过components选项完成&…

JavaScript如何让一个按钮的点击事件在完成之前禁用

在JavaScript中&#xff0c;要禁用一个按钮的点击事件直到某个操作完成&#xff0c;你可以将其点击事件用匿名函数的方式书写。 你可以将其在点击函数内设置为null来禁用按钮。 <button id"butto_n">点击抽奖</button><script>butto_n.onclick bu…

大整数运算详解升级版

目录 大整数的存储 大整数的四则运算 高精度加法 高精度减法 高精度与低精度的乘法 高精度与低精度的除法 大整数的存储 对于大整数使用数组存储&#xff0c;例如定义int型数组d[1000]&#xff0c;那么这个数组中的每一位就代表了存放的整数的每一位。如将整数235813存…

android requireActivity() 和 getActivity()使用问题

requireActivity() 和 getActivity() 都是从 Fragment 中获取宿主 Activity 的方法,但它们有一些不同的行为和使用场景。 requireActivity() 抛出异常:如果 Fragment 没有附加到任何 Activity,调用 requireActivity() 会抛出 IllegalStateException。安全性:通常在你确定 …

新品 | Forge® 1GigE IP67工业相机助力智能农业、食品和饮料行业

近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出Forge 1GigE IP67,它是Forge系列的最新工业相机&#xff0c;旨在在恶劣的工业环境中运行&#xff0c;同时确保高效的生产能力。Forge 1GigE IP67致力于为工厂自动化提供先进成像系统的最新产品。 Forge 1GigE IP67相机…

python-pytorch 实现seq2seq+luong general concat attention 完整代码

接上一篇https://blog.csdn.net/m0_60688978/article/details/139046644 # def getAQ(): # ask[] # answer[] # with open("./data/flink.txt","r",encoding"utf-8") as f: # linesf.readlines() # for line in lin…

MyBatis多数据源配置与使用,基于ThreadLocal+AOP

导读 MyBatis多数据源配置与使用其一其二1. 引依赖2. 配置文件3. 编写测试代码4. 自定义DynamicDataSource类5. DataSourceConfig配置类6. AOP与ThreadLocal结合7. 引入AOP依赖8. DataSourceContextHolder9. 自定义注解UseDB10. 创建切面类UseDBAspect11. 修改DynamicDataSourc…

jQuery里添加事件 (代码)

直接上代码 <!DOCTYPE html> <html><head></head><body><input type"text" placeholder"城市" id"city" /><input type"button" value"添加" id"btnAdd" /><ul id…

PTA 计算矩阵两个对角线之和

计算一个nn矩阵两个对角线之和。 输入格式: 第一行输入一个整数n(0<n≤10)&#xff0c;第二行至第n1行&#xff0c;每行输入n个整数&#xff0c;每行第一个数前没有空格&#xff0c;每行的每个数之间各有一个空格。 输出格式: 两条对角线元素和&#xff0c;输出格式见样例…