jpa的一些知识点
jpa是持久层框架,前身是hibernate
项目中使用:
(一)、pom.xml引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
(二)。application.yml文件配置
#环境配置 dev就是新建的application-dev.yml spring: profiles: active: dev jpa: hibernate: # create-drop的话,每次修改字段,就会把表清空 ddl-auto: update
(三)、创建实体类
@Entity public class Banner { // 这是表的主键 @Id private String id; private String name; private String description; private String img; private String title; }
运行项目,就可以在数据库创建实体类对应的表
备注:
有时候会遇到和这个错误
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path
resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed;
nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.zb.missyou.model.Banner
这是因为没有在实体类中指定主键,就是Banner里的@Id
(四)、查询的时候控制台显示sql语句
执行Repository查询语句(14-3-2)
application-dev.yml
spring: datasource: url: jdbc:mysql://localhost:3306/sleeve?characterEncoding=UTF-8&serverTimezone=GMT%2B8 username: root password: x5219438 # 显示sql语句 jpa: properties: hibernate: show_sql: true format_sql: true
(六)、 双向一对多配置(14-3-4)
多方:维护端
一方:关系被维护端
Banner
@OneToMany(mappedBy = "banner") private List<BannerItem> items;
BannerItem
@ManyToOne @JoinColumn(name = "bannerId") private Banner banner;
jpa设置双向一对多有三个步骤:
第一、在被维护端设置OneToMany
第二、在维护端设置ManyToOne和外键
第三、在被维护端设置mappedBy ,值就是维护端导航属性的名字,就是上面的banner
备注:
@JoinColumn我的理解就是给一对多的多表添加外键;如果不加的话,会生成一张第三张中间表,保存俩张表的主键id