IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【SpringBoot】O/R Mapping框架 -> 正文阅读

[Java知识库]【SpringBoot】O/R Mapping框架

简概

对象与关系的范式间的对比

ObjectRDBMS
粒度
继承没有
唯一性a==b或a.equals(b)主键
关联引用外键
数据访问逐级访问(如 a.b.c)SQL

JPA (Java Persistence API )

JPA 为对象关系映射提供了?种基于 POJO 的持久化模型

  • 简化数据持久化代码的开发?作
  • 为 Java 社区屏蔽不同持久化 API 的差异

2006 年,JPA 1.0 作为 JSR 220 的?部分正式发布 。也正是同年,Hibernate 3.2 成为 JPA 实现 。

Hibernate

官网地址:https://hibernate.org/

简概

  • ?款开源的对象关系映射(Object / Relational Mapping)框架
  • 将开发者从 95% 的常?数据持久化?作中解放出来
  • 屏蔽了底层数据库的各种细节

发展历程

  • 2001年,Gavin King 发布第?个版本
  • 2003年,Hibernate 开发团队加? JBoss
  • 2006年,Hibernate 3.2 成为 JPA 实现

使用参考

https://www.cnblogs.com/mq0036/p/8522150.html

定义 JPA 实体对象

常? JPA 注解

实体

  • @Entity ,表明该类是一个实体类
  • @MappedSuperclass ,有多个实体类,这些类有一个父类,可以在父类上标注这个注解
  • @Table(name) ,把实体跟对应的表关联起来

主键

  • @Id ,每个表都有主键,通过该注解来定义主键
    • @GeneratedValue(strategy, generator) ,指定自增主键的生成策略和生成器。
    • @SequenceGenerator(name, sequenceName) ,使用序列的情况下,指明使用的是什么序列。

映射

关系

  • @OneToOne@OneToMany@ManyToOne@ManyToMany
  • @OrderBy

参考:

https://juejin.cn/post/6844904025163317255

https://blog.csdn.net/qq_38157516/article/details/80146547

通过 Spring Data JPA 操作数据库

Repository

  1. @EnableJpaRepositories 开启扫描。
  2. 实现 Repository 接? ,以下任意一个皆可。
    1. CrudRepository
    2. PagingAndSortingRepository<T, ID>
    3. JpaRepository<T, ID>

定义查询

根据?法名定义查询

  • find…By… / read…By… / query…By… / get…By…
  • count…By…
  • …OrderBy…[Asc / Desc]
  • And / Or / IgnoreCase
  • Top / First / Distinct

分?查询

  • PagingAndSortingRepository
  • Pageable / Sort
  • Slice / Page

保存实体

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlt8biEU-1667046625519)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fc04ab763304441d8bb0511fa8517204~tplv-k3u1fbpfcp-zoom-1.image)]

Repository 是怎么从接?变成 Bean 的

Repository Bean 是如何创建的

  • JpaRepositoriesRegistrar
    • 激活了 @EnableJpaRepositories
    • 返回了 JpaRepositoryConfigExtension
  • RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions
    • 注册 Repository Bean(类型是 JpaRepositoryFactoryBean )
  • RepositoryConfigurationExtensionSupport.getRepositoryConfigurations
    • 取得 Repository 配置
  • JpaRepositoryFactory.getTargetRepository
    • 创建了 Repository
  • 接?中的?法是如何被解释的
    • RepositoryFactorySupport.getRepository 添加了Advice
    • DefaultMethodInvokingMethodInterceptor
  • AbstractJpaQuery.execute 执?具体的查询
  • 语法解析在 Part 中

通过 MyBatis 操作数据库

认识 MyBatis

MyBatis(https://github.com/mybatis/mybatis-3)

  • ?款优秀的持久层框架
  • ?持定制化 SQL、存储过程和?级映射

在 Spring 中使? MyBatis

  • MyBatis Spring Adapter(https://github.com/mybatis/spring)
  • MyBatis Spring-Boot-Starter(https://github.com/mybatis/spring-boot-starter)

简单配置

像其他的 Spring Boot 应用一样,配置参数在 application.properties (或 application.yml )。

MyBatis 在它的配置项中,使用 mybatis 作为前缀。

  • mybatis.mapper-locations = classpath*:mapper/**/*.xml 。XML 映射文件的路径。
  • mybatis.type-aliases-package= 类型别名的包名。搜索类型别名的包名。(包使用的分隔符是 “,; \t\n”)
  • mybatis.type-handlers-package = TypeHandler扫描包名 。搜索类型处理器的包名。(包使用的分隔符是 “,; \t\n”)
  • mybatis.configuration.map-underscore-to-camel-case = true 。是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。

Mapper 的定义与扫描

  • @MapperScan 配置扫描位置
  • @Mapper 定义接?
  • 映射的定义—— XML 与注解

MyBatis Generator

认识 MyBatis Generator

MyBatis Generator(http://www.mybatis.org/generator/)

  • MyBatis 代码?成器
  • 根据数据库表?成相关代码
    • POJO
    • Mapper 接?
    • SQL Map XML

运? MyBatis Generator

命令?

  • java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml

Maven Plugin(mybatis-generator-maven-plugin)

  • mvn mybatis-generator:generate
  • ${basedir}/src/main/resources/generatorConfig.xml

Eclipse Plugin

Java 程序

Ant Task

配置 MyBatis Generator

  • generatorConfiguration
  • context
    • jdbcConnection
    • javaModelGenerator
    • sqlMapGenerator
    • javaClientGenerator (ANNOTATEDMAPPER / XMLMAPPER / MIXEDMAPPER)
    • table

?成时可以使?的插件

内置插件都在 org.mybatis.generator.plugins 包中

  • FluentBuilderMethodsPlugin
  • ToStringPlugin
  • SerializablePlugin
  • RowBoundsPlugin
  • ……

使??成的对象

  • 简单操作,直接使??成的 xxxMapper 的?法
  • 复杂查询,使??成的 xxxExample 对象

MyBatis PageHelper

认识 MyBatis PageHelper

MyBatis PageHepler(https://pagehelper.github.io)

  • ?持多种数据库
  • ?持多种分??式
  • SpringBoot ?持(https://github.com/pagehelper/pagehelper-spring-boot )
    • pagehelper-spring-boot-starter

Lombok

Lombok 能够?动嵌? IDE 和构建?具,提升开发效率

maven依赖

SpringBoot中

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

常用注解

  • @Getter / @Setter
  • @ToString ,默认不会打印父类的属性,可以将callSuper设置为true进行打印。
  • @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor
  • @Data ,该注解中包含了@Getter@Setter@ToString
  • @Builder ,可参考:https://www.jianshu.com/p/d08e255312f9
  • @Slf4j / @CommonsLog / @Log4j2

H2 Database

H2 Database是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2 Database提供了一个十分方便的web控制台用于操作和管理数据库内容。H2 Database还提供兼容模式,可以兼容一些主流的数据库,因此采用H2 Database作为开发期的数据库非常方便。

参考:https://blog.csdn.net/qq_29645505/article/details/97697093

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:12:25  更:2022-11-05 00:13:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/10 18:40:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码