版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
06SpringBoot数据模型与JPA从关系型数据库到面向对象持久化的核心实践ORM核心标准基于JPA规范,以面向对象的思维映射关系型数据库,消除冗余的SQL操作,让开发者专注于业务逻辑而非数据访问细节。数据模型设计掌握实体类注解配置、一对一/一对多等关联关系映射及字段约束,构建结构清晰、映射准确的稳健领域数据模型。Repository层封装通过SpringDataJPA简化数据访问层开发,继承接口即可实现开箱即用的CRUD、分页与复杂动态查询能力。本讲目标实体类与数据库映射熟练运用@Entity、@Table、@Id等核心注解,精确定义数据模型与数据库表结构的对应关系,构建规范、清晰的持久化层基础,为数据交互提供稳固支撑。Repository接口CRUD操作通过继承JpaRepository接口,无需编写复杂SQL语句,即可快速实现数据的增、删、改、查基础功能,极大简化数据访问层代码,提升开发效率与可维护性。Lombok代码简化方案利用@Data、@NoArgsConstructor等注解,自动生成Getter、Setter、构造方法等样板代码,消除冗余,让实体类代码更简洁、清晰,降低后期维护成本。核心价值:通过整合JPA与SpringData,结合Lombok工具,构建高效、简洁、可维护的SpringBoot数据访问层,实现开发流程的全面优化。数据模型概述实体类(Entity)核心作用:与数据库表结构一一对应,是ORM(对象关系映射)的基础核心,承载系统的持久化数据。关键特点:包含与数据库字段对应的属性,通过JPA等注解定义映射关系,完整体现数据的持久化状态与结构。数据传输对象(DTO)核心作用:作为应用不同层级(如Service与Controller、微服务间)高效传输数据的载体,减少交互开销。关键特点:仅封装数据属性,无业务逻辑与持久化行为,按需裁剪字段以剔除冗余,专注于数据的跨层传递。视图对象(VO)核心作用:专为前端视图层定制的数据模型,直接服务于页面展示需求,是用户界面呈现的数据直接来源。关键特点:结构贴合前端UI布局,数据可聚合自多个Entity或DTO,仅保留视图所需的展示信息,剥离无关数据。合理区分并运用Entity、DTO、VO这三类数据模型,能有效降低系统层级间的耦合度,明确数据流转方向,过滤冗余信息,从而构建出高内聚、低耦合、边界清晰且易于维护的现代化代码架构体系。JPA常用注解@Entity标记该类为JPA实体类,是将普通Java类映射为数据库表的核心注解,类中的属性将与表中的列一一对应,确立对象与关系的映射基础。@Table(name="表名")显式指定实体类映射的数据库表名。若不使用该注解,默认表名与实体类名相同,可灵活适配已有的数据库结构,解决命名规范不一致的问题。@Id标记实体类中的一个字段作为映射表的主键,是标识实体唯一性的关键注解。每个实体类必须且仅有一个@Id注解,确立数据记录的唯一标识。@GeneratedValue用于指定主键的自动生成策略,支持IDENTITY(数据库自增)、SEQUENCE(序列生成)、TABLE(表生成器)等方式,简化主键值的管理与维护。@Column详细配置实体字段与数据库列的映射关系,可设置列名(name)、字段长度(length)、是否可为空(nullable)、唯一约束(unique)等属性,精准控制表结构。@Transient标记该字段为临时计算字段,不会被持久化到数据库中,仅在内存中使用。常用于存储不需要永久保存的辅助信息或计算结果。主键生成策略通过JPA的@GeneratedValue注解的strategy属性指定主键生成策略,可灵活适配不同数据库的特性,是实现数据持久化的核心配置环节。IDENTITY:数据库自增机制依赖数据库的自增字段(如MySQL的AUTO_INCREMENT),主键值由数据库自动分配。适配MySQL、SQLServer等支持自增列的数据库,简单易用。SEQUENCE:数据库序列对象利用数据库的序列(Sequence)对象生成主键,需配合@SequenceGenerator配置。适配Oracle、PostgreSQL等支持序列的数据库,性能高效。TABLE:中间表模拟序列通过创建中间表记录主键最大值来模拟序列,实现完全的跨数据库兼容。适用于需要在多种异构数据库间频繁切换的场景,兼容性最强。AUTO:自动策略选择由JPA持久化提供者(如Hibernate)根据底层数据库类型自动选择策略。适合不确定目标数据库,或希望代码保持数据库无关性的开发场景。Lombok简化实体类Lombok通过注解在编译时自动为实体类生成getter、setter、toString、equals和hashCode等样板代码,极大减少冗余,让开发者彻底从重复代码中解放,聚焦核心业务逻辑。Lombok是Java开发社区广泛使用的工具库,通过注解处理器在编译期动态生成字节码,不影响运行时性能,让代码更简洁优雅。核心价值:不仅精简了代码行数,更统一了项目编码规范,消除了手写样板代码带来的格式不一致问题,是现代Java开发的必备工具。01.核心注解:一站式实体类配置通过`@Data`替代基础getter/setter,结合`@NoArgsConstructor`、`@AllArgsConstructor`与`@Builder`,一行注解即可完成实体类的基础配置,彻底告别繁琐的样板代码。@Data@BuilderpublicclassUser{privateLongid;privateStringusername;}02.链式构建:优雅创建对象使用`@Builder`注解启用链式调用,无需手动编写大量重载构造器,代码结构清晰直观,极大提升了对象创建代码的可读性与可维护性。Useruser=User.builder().id(1L).name("张三").email("zs@").build();Repository接口体系01.Repository:顶层标记接口体系中最基础的空接口,仅作为标记使用,不包含任何方法定义,是所有Repository接口的父接口,为后续功能扩展提供统一的类型标识。02.CrudRepository:基础CRUD操作继承自Repository接口,封装了实体类的创建、读取、更新、删除等核心数据操作方法,提供了完备的基础数据访问能力,满足常规业务场景需求。03.PagingAndSortingRepository:分页与排序在CrudRepository基础上扩展了分页查询和结果排序的能力,支持通过Pageable和Sort参数,在大数据集场景下高效地进行数据的分页获取与有序展示。04.JpaRepository:企业开发首选继承自PagingAndSortingRepository,整合了JPA规范的批量操作、Flush等额外功能,提供了最丰富、最实用的方法集,是实际项目开发中的首选接口。使用示例:定义空接口publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{},无需编写任何实现代码,即可自动拥有完整的CRUD、分页、排序等全套数据操作能力。JpaRepository基本方法save(Entityentity)用于保存或更新实体。当实体主键为空时执行新增,主键存在时执行更新,是数据持久化最基础、最常用的核心方法。findById(IDid)根据主键ID精准查询,返回Optional<T>类型,从根源上避免空指针异常,是按主键检索单条数据的标准规范方式。findAll()查询并返回对应数据表中的全部记录,结果封装为List集合。该方法适用于数据体量较小、需要完整展示全量数据的业务场景。deleteById(IDid)根据主键ID删除对应实体记录,操作会直接同步至数据库,是业务中删除单条数据最直接、高效且安全的方法。count()统计当前实体类在数据库中的总记录行数,返回long类型数值。广泛应用于数据概览统计、分页组件的总页数计算等场景。findAll(Pageablepageable)支持分页与动态排序查询,返回包含分页元数据和数据列表的Page对象,是后端处理大数据量列表展示的核心方法。findAll(Sortsort)根据指定字段和升降序规则对查询结果排序,返回有序的List集合,满足业务中对数据展示顺序的多样化需求。案例:用户实体与Repository01.定义实体类(Entity)@Entity@DatapublicclassUser{@Id@GeneratedValue(strategy=IDENTITY)privateLongid;privateStringname;privateStringemail;privateIntegerage;}02.声明数据仓库(Repository)//继承JpaRepository,自动获得CRUD能力publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{//可在此扩展自定义查询方法,例如://List<User>findByEmail(Stringemail);}03.业务逻辑与测试(Runner)@AutowiredUserRepositoryrepo;//保存用户repo.save(newUser(null,"张三","zs@",20));//根据ID查询Useruser=repo.findById(1L).orElse(null);//删除用户repo.deleteById(1L);核心逻辑:通过定义实体类(Entity)映射数据库表结构,Repository接口封装底层数据访问逻辑,业务层无需关注SQL细节,直接注入并调用接口方法即可高效完成数据的持久化操作。SpringDataJPA配置spring:#根配置节点datasource:#数据源配置,使用H2内存库url:jdbc:h2:mem:testdb;username:sa;password:;driver-class-name:org.h2.Driverjpa:#JPA核心属性配置hibernate.ddl-auto:create-drop#开发期策略,启动建表/关闭删表show-sql:true;properties.hibernate.format_sql:true#开启并格式化SQL日志核心配置逻辑在application.yml中集中管理数据源连接信息与JPA行为,通过配置DDL策略和SQL日志,快速搭建规范的持久化开发环境,减少样板代码。H2内存数据库的价值作为轻量级嵌入式数据库,H2无需独立安装部署,数据运行在内存中,启动极快,是Java项目开发、单元测试与Demo演示的理想选择。开发效能总结:合理配置JPA的DDL策略与SQL日志,能直观监控底层数据操作,大幅降低调试成本;配合H2内存数据库实现“零运维”环境,让开发者聚焦于业务逻辑而非环境搭建。课后作业本次作业需独立完成商品管理小案例,通过创建实体类、定义Repository接口,并利用`CommandLineRunner`测试完整的CRUD操作,深入理解JPA数据持久化的核心流程,掌握从实体映射到数据访问的全链路开发。01.定义实体类创建`Product`类,配置id(主键自增)、name、price及stock核心字段,并添加`@Entity`、`@Id`等JPA注解,完成实体与数据库表的映射配置。02.声明数据接口新建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年法官助理招聘考试题库及答案
- 2026年《民用航空无人机管理规定》题库及答案
- 文明礼仪记心中小学主题班课件件
- 数据专员数据质量评估表
- 珠宝样品交付期限提醒通知7篇
- 订单付款条件调整通知书4篇
- 中小企业财务报表分析全面解析指南
- 运动与健康:快乐体育活动小学主题班会课件
- 家电供应商新品到货函(6篇)
- 小学主题班会课件:扣好人生第一粒扣子从小学习做人
- 上海高中2025届高考仿真模拟物理试卷含解析
- DL-T5588-2021电力系统视频监控系统设计规程
- DL-T5366-2014发电厂汽水管道应力计算技术规程
- 2024年重庆沙坪坝区西部重庆科学城沙兴实业发展集团有限公司招聘笔试参考题库含答案解析
- 《meta分析入门》课件
- 油脂加工与油脂知识教学课件
- 盘扣脚手架技术交底
- 招商银行智慧营销体系规划方案(2022年-2023年)
- von frey丝K值表完整版
- 《勾股定理》整章综合测试(一)338345
- NB/T 10943-202210 kV及以下有源型电压暂降治理设备检测规程
评论
0/150
提交评论