在实际过往的项目中,常用的查询操作有:1、单表查询,2、一对一查询(主表和详情表)3、一对多查询(一张主表,多张子表)4、多对多查询(如权限控制,用户、角色多对多)。做个总结,所以废话不多说。
使用idea构建springboot项目,引入依赖如下:
dependencies>
org.springframework.boot
spring-boot-starter-data-jpa
com.h2database
h2
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
使用h2数据库做测试用,application.yml配置如下:
spring:
jpa:
generate-ddl: truehibernate:
ddl-auto: update
properties:
hibenate:
format_sql:falseshow-sql: true
首先,一对一有好几种,这里举例的是常用的一对一双向外键关联(改造成单向很简单,在对应的实体类去掉要关联其它实体的属性即可),并且配置了级联删除和添加,相关类如下:
packageio.powerx;import lombok.*;import javax.persistence.*;/*** Created by Administrator on 2018/8/15.*/@Getter
@Setter
@Entitypublic classBook {
@Id
@GeneratedValueprivateInteger id;privateString name;
@OneToOne(cascade={CascadeType.PERSIST,CascadeType.REMOVE})
@JoinColumn(name="detailId",referencedColumnName = "id")privateBookDetail bookDetail;publicBook(){super();
}publicBook(String name){super();this.name =name;
}publicBook(String name, BookDetail bookDetail) {super();this.name =name;this.bookDetail =bookDetail;
}
@OverridepublicString toString() {if (null ==bookDetail) {return String.format("Book [id=%s, name=%s, number of pages=%s]", id, name, "");
}return String.format("Book [id=%s, name=%s, number of pages=%s]", id, name, bookDetail.getNumberOfPages());
}
}
packageio.powerx;importlombok.Getter;importlombok.Setter;import javax.persistence.*;
@Getter
@Setter
@Entity(name= "BOOK_DETAIL")public classBookDetail {
@Id
@GeneratedValueprivateInteger id;
@Column(name= "NUMBER_OF_PAGES")privateInteger numberOfPages;
@OneToOne(mappedBy= "bookDetail")privateBook b