日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPA关系映射系列一:one-to-one外键关联 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

SpringDataJPA是Spring Data的一個子項目,通過提供基于JPA的Repository極大的減少了JPA作為數據訪問方案的代碼量,你僅僅需要編寫一個接口集成下SpringDataJPA內部定義的接口即可完成簡單的CRUD操作。

前言

本篇文章引導你通過Spring Boot,Spring Data JPA和MySQL實現一對一外鍵關聯映射。

準備

  • 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_id 和 book_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 指定主鍵的生成策略。

  • TABLE:使用表保存id值
  • IDENTITY:identitycolumn
  • SEQUENCR :sequence
  • AUTO:根據數據庫的不同使用上面三個
  • @Column 聲明該屬性與數據庫字段的映射關系。

  • @OneToOne 一對一關聯關系

  • @JoinColumn 指定關聯的字段

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

Spring Data JPA包含了一些內置的Repository,實現了一些常用的方法:findone,findall,save等。

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外键关联的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。