公司需要做网站建设电影网站视频

张小明 2026/1/10 15:51:42
公司需要做网站,建设电影网站视频,wordpress扁平化,青岛网站建设华夏你希望深入了解 JPA 这个 ORM 规范#xff0c;我会从它的定义、核心设计思想、核心组件、常用注解、基本使用方式以及与 Hibernate 的关系等方面#xff0c;为你做全面且易懂的讲解#xff0c;帮你彻底搞懂 JPA。 一、JPA 是什么#xff1f; JPA#xff08;Java Persisten…你希望深入了解 JPA 这个 ORM 规范我会从它的定义、核心设计思想、核心组件、常用注解、基本使用方式以及与 Hibernate 的关系等方面为你做全面且易懂的讲解帮你彻底搞懂 JPA。一、JPA 是什么JPAJava Persistence APIJava 持久化 API不是一个具体的 ORM 框架而是 Java EE 官方制定的一套对象关系映射的标准规范接口 注解/XML。简单理解JPA 是“接口/规则”定义了如何将 Java 对象映射到数据库表、如何执行 CRUD 操作等标准Hibernate、EclipseLink、OpenJPA 是 JPA 的实现具体干活的框架其中 Hibernate 是最主流、最成熟的实现也是 Spring Data JPA 默认的底层实现。JPA 诞生的核心目的统一 Java 持久层的开发标准避免开发者被某一个 ORM 框架绑定比如早期只用 Hibernate 会导致代码和框架强耦合。二、JPA 的核心设计思想JPA 遵循“面向对象”的设计思路核心是将数据库表与 Java 实体类Entity做映射让你通过操作 Java 对象来完成数据库操作无需编写原生 SQL也支持自定义 SQL。核心目标消除 JDBC 代码的冗余不用手动写Connection、PreparedStatement、结果集映射等以面向对象的方式操作数据库比如用entityManager.persist(user)代替INSERT语句提供统一的 API降低切换 ORM 实现的成本比如从 Hibernate 切换到 EclipseLink 只需改配置。三、JPA 的核心组件JPA 的核心由 3 部分组成也是你使用 JPA 必须掌握的核心内容1. 核心 API接口API 接口作用EntityManagerJPA 的核心操作接口用于执行实体的增删改查、获取事务、创建查询等EntityManagerFactory用于创建EntityManager的工厂类重量级对象全局只创建一个EntityTransaction事务管理接口也可结合 Spring 事务使用更推荐Query/TypedQueryJPA 的查询接口支持 JPQL/SQL 查询2. 注解核心用于对象-表映射JPA 的核心注解都在javax.persistence包下Spring Boot 中已自动引入常用注解如下注解作用Entity标记类为 JPA 实体类对应数据库中的一张表Table配置实体类对应的数据库表名默认类名小写Id标记字段为主键GeneratedValue配置主键生成策略如自增、UUID 等Column配置字段对应的数据库列名、长度、非空、唯一等属性默认字段名Transient标记字段不映射到数据库仅内存使用OneToOne一对一关联关系OneToMany一对多关联关系ManyToOne多对一关联关系ManyToMany多对多关联关系3. 查询语言JPQLJPQLJava Persistence Query Language是 JPA 定义的面向对象的查询语言基于实体类和属性而非数据库表和字段最终会被 JPA 实现如 Hibernate翻译成原生 SQL。比如JPQLSELECT u FROM User u WHERE u.userName ?1User 是实体类名userName 是实体属性对应的 SQLSELECT * FROM t_user WHERE user_name ?JPQL 支持分页、排序、聚合函数COUNT/SUM 等也支持原生 SQL 嵌入。四、JPA 的基本使用纯 JPA Spring Boot 两种方式方式 1纯 JPA 原生使用理解底层原理// 1. 定义实体类importjavax.persistence.*;Entity// 标记为实体类Table(namet_user)// 对应数据库表 t_userpublicclassUser{Id// 主键GeneratedValue(strategyGenerationType.IDENTITY)// 自增主键MySQL 适用privateLongid;Column(nameuser_name,length50,nullablefalse,uniquetrue)// 映射字段列名 user_name长度 50非空唯一privateStringuserName;Column(nullablefalse)// 非空privateIntegerage;Transient// 该字段不映射到数据库privateStringtempField;// 必须有无参构造器JPA 反射需要publicUser(){}// 有参构造器、getter/setter 省略}// 2. 原生 JPA 操作手动管理 EntityManagerpublicclassJpaNativeDemo{publicstaticvoidmain(String[]args){// 1. 创建 EntityManagerFactory全局唯一重量级EntityManagerFactoryemfPersistence.createEntityManagerFactory(jpa_demo);// 2. 创建 EntityManager轻量级每次操作创建/关闭EntityManagerememf.createEntityManager();// 3. 开启事务EntityTransactiontxem.getTransaction();tx.begin();try{// 4. 操作数据库保存用户UserusernewUser();user.setUserName(张三);user.setAge(25);em.persist(user);// 插入数据对应 INSERT// 5. 查询用户UserfindUserem.find(User.class,1L);// 根据主键查询对应 SELECTSystem.out.println(查询到用户findUser.getUserName());// 6. 修改用户findUser.setAge(26);em.merge(findUser);// 更新数据对应 UPDATE// 7. 删除用户// em.remove(findUser); // 删除数据对应 DELETE// 8. 提交事务tx.commit();}catch(Exceptione){// 回滚事务tx.rollback();e.printStackTrace();}finally{// 关闭资源em.close();emf.close();}}}// 3. 配置文件META-INF/persistence.xml?xml version1.0encodingUTF-8?persistence xmlnshttp://java.sun.com/xml/ns/persistenceversion2.1persistence-unit namejpa_demotransaction-typeRESOURCE_LOCAL!--JPA 实现类Hibernate--providerorg.hibernate.jpa.HibernatePersistenceProvider/provider!--映射的实体类--classcom.example.entity.User/classproperties!--数据库连接信息--property namejavax.persistence.jdbc.drivervaluecom.mysql.cj.jdbc.Driver/property namejavax.persistence.jdbc.urlvaluejdbc:mysql://localhost:3306/test?useSSLfalse/property namejavax.persistence.jdbc.uservalueroot/property namejavax.persistence.jdbc.passwordvalue123456/!--Hibernate配置--property namehibernate.hbm2ddl.autovalueupdate/!--自动更新表结构--property namehibernate.show_sqlvaluetrue/!--打印 SQL--property namehibernate.format_sqlvaluetrue/!--格式化 SQL--property namehibernate.dialectvalueorg.hibernate.dialect.MySQL8Dialect/!--数据库方言--/properties/persistence-unit/persistence方式 2Spring Boot Spring Data JPA实际开发主流Spring Data JPA 是 Spring 对 JPA 的进一步封装提供了通用的 CRUD 接口无需手动写基础操作代码是实际开发中最常用的方式步骤 1引入依赖pom.xmldependencies!-- Spring Boot JPA 起步依赖自动引入 Hibernate --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency!-- MySQL 驱动 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!-- Spring Boot Web方便测试 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies步骤 2配置 application.ymlspring:# 数据库连接配置datasource:url:jdbc:mysql://localhost:3306/test?useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:123456driver-class-name:com.mysql.cj.jdbc.Driver# JPA 配置jpa:hibernate:ddl-auto:update# 表结构策略none(无)、create(每次创建)、update(更新)、validate(校验)show-sql:true# 打印 SQLproperties:hibernate:format_sql:true# 格式化 SQLopen-in-view:false# 关闭 Open Session In View避免性能问题database-platform:org.hibernate.dialect.MySQL8Dialect# 数据库方言步骤 3编写 Repository 接口核心无需写实现importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.Query;importorg.springframework.data.repository.query.Param;importjava.util.List;// 继承 JpaRepository实体类, 主键类型自动获得 CRUD 方法publicinterfaceUserRepositoryextendsJpaRepositoryUser,Long{// 1. 按方法名自动生成 SQL无需写 JPQL/SQLUserfindByUserName(StringuserName);// 根据用户名查询ListUserfindByAgeGreaterThan(Integerage);// 查询年龄大于指定值的用户// 2. 自定义 JPQL 查询推荐Query(SELECT u FROM User u WHERE u.age BETWEEN :minAge AND :maxAge)ListUserfindByAgeRange(Param(minAge)IntegerminAge,Param(maxAge)IntegermaxAge);// 3. 自定义原生 SQL 查询Query(valueSELECT * FROM t_user WHERE age ?1,nativeQuerytrue)ListUserfindByAge(Integerage);}步骤 4编写 Service 和 Controller测试// Service 层整合事务importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;ServicepublicclassUserService{AutowiredprivateUserRepositoryuserRepository;// 保存用户事务TransactionalpublicUsersaveUser(Useruser){returnuserRepository.save(user);// 内置 save 方法}// 根据 ID 查询publicUsergetUserById(Longid){// findById 返回 Optional避免空指针returnuserRepository.findById(id).orElse(null);}// 查询所有用户publicListUsergetAllUsers(){returnuserRepository.findAll();}// 自定义查询按年龄范围publicListUsergetUsersByAgeRange(Integermin,Integermax){returnuserRepository.findByAgeRange(min,max);}// 删除用户TransactionalpublicvoiddeleteUser(Longid){userRepository.deleteById(id);}}// Controller 层测试接口importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;RestControllerRequestMapping(/users)publicclassUserController{AutowiredprivateUserServiceuserService;// 新增用户PostMappingpublicUseraddUser(RequestBodyUseruser){returnuserService.saveUser(user);}// 根据 ID 查询GetMapping(/{id})publicUsergetUser(PathVariableLongid){returnuserService.getUserById(id);}// 查询所有GetMappingpublicListUsergetAll(){returnuserService.getAllUsers();}// 按年龄范围查询GetMapping(/age-range)publicListUsergetByAgeRange(RequestParamIntegermin,RequestParamIntegermax){returnuserService.getUsersByAgeRange(min,max);}// 删除用户DeleteMapping(/{id})publicStringdelete(PathVariableLongid){userService.deleteUser(id);return删除成功;}}五、JPA 的核心优势与适用场景优势标准化遵循 Java 官方规范不绑定具体实现可灵活切换 ORM 框架简化开发无需写基础 CRUD 代码Spring Data JPA 按方法名自动生成 SQL面向对象以操作 Java 对象的方式操作数据库符合面向对象编程思想灵活查询支持 JPQL、原生 SQL、方法名查询三种方式兼顾简洁性和灵活性无缝整合 Spring与 Spring Boot/Spring 事务/AOP 等生态完美融合。适用场景中大型企业级应用追求代码规范、低耦合业务逻辑以简单 CRUD 为主无需复杂 SQL希望快速开发减少重复的数据库操作代码需兼顾跨数据库兼容性JPA 自动适配不同数据库方言。局限性复杂 SQL如多表关联、分组聚合、存储过程不如 MyBatis 灵活自动生成的 SQL 可能存在性能问题需手动优化学习成本略高需理解 ORM 思想、JPQL、关联关系等。总结JPA 是ORM 规范而非具体框架Hibernate 是其最主流的实现Spring Data JPA 是 Spring 对 JPA 的进一步封装开发首选JPA 的核心是通过注解实现 Java 实体类与数据库表的映射通过EntityManager或 Spring Data JPA 接口完成数据库操作Spring Boot Spring Data JPA 是实际开发的主流方式核心优势是简化 CRUD 开发、统一规范、整合 Spring 生态适合中大型应用的快速开发。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

广州公司网站开发朝阳区搜索优化seosem

摘 要 本文设计并实现了一个基于SpringBoot框架、微信小程序、MySQL数据库和Java语言的乡村旅游服务系统。系统旨在为乡村旅游行业提供一个集成化、便捷的在线平台,满足不同用户群体的需求,包括普通用户、商家用户、房东用户、导游用户及管理员。普通用…

张小明 2026/1/10 22:58:22 网站建设

域名cn是个什么网站简述网络营销与传统营销的区别

第一章:数字人动作流畅度的技术演进数字人作为虚拟现实、游戏和人工智能交互的重要载体,其动作的自然与流畅程度直接影响用户体验。随着图形学、深度学习与运动捕捉技术的发展,数字人动作生成已从早期的关键帧动画逐步演进为基于物理模拟与神…

张小明 2025/12/30 16:18:38 网站建设

假发网站建设wordpress接入扫码支付宝

蜂鸣器报警模块避坑指南:新手接线常见翻车实录你有没有遇到过这样的情况?代码写得一丝不苟,逻辑清晰,引脚配置也没错,可一通电——蜂鸣器就是不响。再一摸MCU芯片,烫手;或者更惨,板子…

张小明 2026/1/9 12:24:04 网站建设

网站建设技术经理岗位职责网站导航栏有哪些

国家中小学智慧教育平台电子课本智能解析与批量下载高效解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为获取电子课本而烦恼吗?每天面对…

张小明 2026/1/10 17:02:56 网站建设

如何在虚拟机中建设网站平台的运营推广怎么做

实战演练COLMAP:从零构建你的三维世界 【免费下载链接】colmap COLMAP - Structure-from-Motion and Multi-View Stereo 项目地址: https://gitcode.com/GitHub_Trending/co/colmap 你是否曾幻想过将随手拍摄的日常照片转化为令人惊叹的3D模型?今…

张小明 2026/1/10 9:37:51 网站建设

课程网站建设总体情况网站开发流程属于制作与开发

在软考高级信息系统项目管理师(简称 “软考高项”)培训领域,老金团队凭借扎实的专业功底、丰富的教学经验与精准的备考指导,成为行业内备受认可的优质团队。团队中的金老师、秦老师、尹老师、李老师四位核心导师,各有教…

张小明 2026/1/1 18:49:27 网站建设