2019独角兽企业重金招聘Python工程师标准>>>

SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为数据访问方案的代码量,你仅仅需要编写一个接口集成下SpringDataJPA内部定义的接口即可完成简单的CRUD操作。

前言

本篇文章引导你通过Spring BootSpring Data JPAMySQL实现一对一外键关联映射。

准备

  • JDK 1.8 或更高版本
  • Maven 3 或更高版本
  • MySQL Server 5.6

技术栈

  • Spring Data JPA
  • Spring Boot
  • MySQL

目录结构

父pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.merryyou</groupId><artifactId>jpa-example</artifactId><version>1.0-SNAPSHOT</version><modules><module>one-to-one-foreignkey</module><module>one-to-one-primarykey</module><module>one-to-many</module><module>many-to-many</module><module>many-to-many-extra-columns</module></modules><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>io.spring.platform</groupId><artifactId>platform-bom</artifactId><version>Brussels-SR6</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

一对一外键

目录结构

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>jpa-example</artifactId><groupId>cn.merryyou</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>one-to-one-foreignkey</artifactId><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
</project>
一对一关系

book.book_detail_idbook_detail.id

db.sql

CREATE DATABASE  IF NOT EXISTS `jpa_onetoone_foreignkey`;
USE `jpa_onetoone_foreignkey`;--
-- Table structure for table `book_detail`
--DROP TABLE IF EXISTS `book_detail`;
CREATE TABLE `book_detail` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`number_of_pages` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;--
-- Table structure for table `book`
--DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`book_detail_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_book_bookdetail` (`book_detail_id`),
CONSTRAINT `fk_book_bookdetail` FOREIGN KEY (`book_detail_id`) REFERENCES `book_detail` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
实体类
Book
@Entity
@Data
@Table(name = "book")
public class Book {@Id@GeneratedValue(strategy = GenerationType.AUTO)@Column(name = "id")private int id;@Column(name = "name")private String name;@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name = "book_detail_id")
//    @Lazy(false)private BookDetail bookDetail;public Book() {}public Book(String name, BookDetail bookDetail) {this.name = name;this.bookDetail = bookDetail;}
}
BookDetail
@Entity
@Table(name = "book_detail")
@Data
public class BookDetail {@Id@GeneratedValue(strategy = GenerationType.AUTO)@Column(name = "id")private Integer id;@Column(name = "number_of_pages")private Integer numberOfPages;@OneToOne(mappedBy = "bookDetail")private Book book;public BookDetail() {}public BookDetail(Integer numberOfPages) {this.numberOfPages = numberOfPages;}
}
  • @Table声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。该注释不是必须的,如果没有则系统使用默认值(实体的短类名)。

  • @Id 声明此属性为主键。该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成

  • @GeneratedValue 指定主键的生成策略。

    1. TABLE:使用表保存id值
    2. IDENTITY:identitycolumn
    3. SEQUENCR :sequence
    4. AUTO:根据数据库的不同使用上面三个
  • @Column 声明该属性与数据库字段的映射关系。

  • @OneToOne 一对一关联关系

  • @JoinColumn 指定关联的字段

Spring Data JPA Repository
public interface BookRepository extends JpaRepository<Book, Integer> {
}

Spring Data JPA包含了一些内置的Repository,实现了一些常用的方法:findonefindallsave等。

application.yml
spring:datasource:url: jdbc:mysql://localhost/jpa_onetoone_foreignkeyusername: rootpassword: admindriver-class-name: com.mysql.jdbc.Driverjpa:show-sql: true
BookRepositoryTest
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class BookRepositoryTest {@Autowiredprivate BookRepository bookRepository;@Testpublic void saveTest() throws Exception {List<Book> books = new ArrayList<>();books.add(new Book("Book one", new BookDetail(1)));books.add(new Book("Book two", new BookDetail(2)));books.add(new Book("Book three", new BookDetail(3)));List<Book> bookList = bookRepository.save(books);Assert.assertNotNull(bookList);Assert.assertEquals(3, bookList.size());}@Testpublic void findBooksTest() throws Exception{List<Book> books = bookRepository.findAll();for (Book book: books) {log.info(book.toString());}}}

代码下载

从我的 github 中下载,https://github.com/longfeizheng/jpa-example/tree/master/one-to-one-foreignkey


???关注微信小程序java架构师历程 上下班的路上无聊吗?还在看小说、新闻吗?不知道怎样提高自己的技术吗?来吧这里有你需要的java架构文章,1.5w+的java工程师都在看,你还在等什么?

转载于:https://my.oschina.net/merryyou/blog/1626381

JPA关系映射系列一:one-to-one外键关联相关推荐

  1. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  2. Spring Data JAP框架处理表关系的步骤(一对一外键关联

    Spring Data JAP框架处理表关系的步骤: 1)确定表和表之间的关系 2)对应表创建实体类 3)在实体类配置注解关联关系 4)测试 一对一表关系的实现方案(外键关联: 1 在Customer ...

  3. Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式

    首先还是来构造一个实际应用的场景,比如实体类车辆(Car),它具有以下属性:Id,品牌(brand),车牌(lisencePlate):实体类车牌(LisencePlate),它具有以下属性:Id,号 ...

  4. JPA关系映射之one-to-many和many-to-one

    one-to-many(一对多)和many-to-one(多对一)双向关联 假设部门与员工是一对多关系,反过来员工与部门就是多对一关系. Dept.java类 1 public class Dept ...

  5. hibernate的一对一主键双向映射关系和外键双向映射关系(一)

    主键关联的重点是关联的两个表共享一个主键值.本例中采用,一个单位在网上的一个系统中注册会员. 1,会员数据保存在会员表company中,每个会员的登录账号保存在表login中: 2,一个会员只有一个登 ...

  6. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...

    前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...

  7. JPA教程:JPA概述、JPA实体生命周期、JPA实体映射关系、JPA查询语言

    JPA定义了Java ORM及实体操作API的标准.本文摘录了JPA的一些关键信息以备查阅. 如果有hibernate的基础,通过本文也可以快速掌握JPA的基本概念及使用. 1 JPA概述 JPA(J ...

  8. JPA 中使用 @OneToMany 、@ManyToOne 等关系映射注解

    JPA 做 ORM(Object Relational Mapping,对象关系映射)时,为了开发效率,通常会在实体类上用 hibernate 的关系关联注解. 包括:@OneToOne. @OneT ...

  9. JPA 5.映射关联关系

    映射关联关系 映射单向多对一的关联关系 Customer类 package com.ifox.hgx.jpa.entity;import javax.persistence.*; import jav ...

最新文章

  1. 【初识Java】 -- Java的数据类型与运算符
  2. 2018年中国人工智能行业研究报告|附下载
  3. spring 获取配置文件的值
  4. The 2016 ACM-ICPC Asia China-Final Contest Promblem D
  5. 计算string长度 java_夯实基础:掌握从Java 9+开始的String的空间优化
  6. android 将IE设为默认打开的浏览器
  7. 「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系
  8. c/c++面试试题(二)
  9. Linux环境变量PS1配置
  10. 微信圈子将于12月28日停止运营,网友:不是微信朋友圈?
  11. js在html中加文字走马灯特效,jQuery简单的文字跑马灯特效
  12. everything搭配什么软件_重磅推荐一款神级工具软件!有了它,90%的软件都可以卸载了!...
  13. OpenCV-Laplacian边缘检测
  14. 【SaaS - Export项目】23 - Shiro加密实现登录注销,MD5加密算法,加盐加密,shiro凭证匹配器,实现增加用户密码密文存储数据库,登录时通过加盐加密对密文进行比较
  15. Flex Builder 破解和注册方法
  16. 使用Kali Linux Metasploit 复现 word宏
  17. android八方向手势,Android开发中顺时针逆时针滑动手势的识别算法
  18. SOP SO SOIC TSSOP SSOP 封装直观比较图 [转载]
  19. 干货分享:常见的测试类型有哪些?
  20. 给中国学生的第三封信——成功、自信、快乐

热门文章

  1. store内部数据调用 与 view使用store数据
  2. matlab相语法,学会System Generator(10)——支持的MATLAB语法
  3. docker入门,基于ubuntu16.04
  4. 基于webpack4.X从零搭建React脚手架
  5. 基于密钥的认证机制(ssh)
  6. .Net Core建站(2):EF Core+CodeFirst数据库迁移
  7. 普林斯顿公开课 算法2-2:选择排序
  8. Materialized Views
  9. Maven+Mybatis+Spring配置
  10. 三种复方门冬维甘滴眼液的抗菌能力比较