第一节:新建数据表

建表先画图: 在Teacher实体中,我们id的类型为Long,为了前台统一,我们在图中,也将其声明为Long。并新建Klass实体,增加一个关键字id,一个字段name

逻辑视图: /SpringMVC/assets/image/chapter3/1.png

物理视图: /SpringMVC/assets/image/chapter3/2.png

建立实体

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;        // 班级名称
}

测试

启动程序,查看是否生成了数据表 /SpringMVC/assets/image/chapter3/3.png

建立实体间联系

逻辑视图: /SpringMVC/assets/image/chapter3/4.png

物理视图: /SpringMVC/assets/image/chapter3/5.png

n:1的关系,在Hibernate(SrpingMVCjpa使用的为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为我们自动创建了数据的同时,还写入了索引及外键。

测试

表结构: /SpringMVC/assets/image/chapter3/6.png

表索引: /SpringMVC/assets/image/chapter3/7.png

表外键: /SpringMVC/assets/image/chapter3/8.png

表索引将加快我们的查询效率,表外键将会自动产生约束。

有人说,在这没有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