第一节:新建数据表
建表先画图:
在Teacher
实体中,我们id
的类型为Long
,为了前台统一,我们在图中,也将其声明为Long
。并新建Klass
实体,增加一个关键字id
,一个字段name
。
逻辑视图:
物理视图:
建立实体
package com.mengyunzhi.repository;
import javax.persistence.*;
/**
* Created by panjie on 17/4/13.
* 班级
*/
@Entity
public class Klass {
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
private String name; // 班级名称
}
测试
启动程序,查看是否生成了数据表
建立实体间联系
逻辑视图:
物理视图:
n:1
的关系,在Hibernate
(SrpingMVC
的jpa
使用的为Hibernate
)中以@ManyToOne
来声明。同以往我们会在模型中,建立一个外键的字段不同,我们在此直接建立这个外键对应的实体。
public class Klass {
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
@ManyToOne // 多对一关联
private Teacher teacher;
private String name; // 名称
}
最后,让我们使用IDEA
自动、快速生成一个空的构造函数、一个带有参数的构造函数、set\get函数及toString函数。我们现在所需要记住的仅仅是:规范规定我们必须这么做!
package com.mengyunzhi.repository;
import javax.persistence.*;
/**
* Created by panjie on 17/4/13.
*/
@Entity
public class Klass {
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
@ManyToOne // 多对一关联
private Teacher teacher;
private String name; // 名称
public Klass() {
}
public Klass(Teacher teacher, String name) {
this.teacher = teacher;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
此时,当我们再次重新启动程序时,Hibernate
为我们自动创建了数据的同时,还写入了索引及外键。
测试
表结构:
表索引:
表外键:
表索引将加快我们的查询效率,表外键将会自动产生约束。
有人说,在这没有teacherId
字段的话,如果我想获取这个字段值怎么办呢? 带着这个问题往下学习,相信你会得到答案。
建立实体仓库
有了实体,想进一步进行数据的CRUD
操作时,就需要有一个与实体相对应的仓库接口文件了。
package com.mengyunzhi.repository;
import org.springframework.data.repository.CrudRepository;
/**
* Created by panjie on 17/4/14.
*/
public interface KlassRepository extends CrudRepository<Klass, Long> {
}
至此,根据ER图转化的数据表的基本工作完成。
参考: https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.htm