diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Classes.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Classes.java
new file mode 100644
index 0000000..73cf996
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Classes.java
@@ -0,0 +1,111 @@
+package com.supwisdom.leaveschool.basicsdata.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+/**
+ * 班级
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_CLASSES")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_CLASSES",comment="班级表")
+public class Classes extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5374908332162700935L;
+	
+	  /**
+	   * 班级代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '班级代码'")
+	  private String code;
+	  
+	  /**
+	   * 班级名称
+	   */
+	  @Column(name = "NAME", columnDefinition="varchar(120) not null comment '班级名称'")
+	  private String name;
+	  /**
+	   * 所在院系
+	   */
+	  @JoinColumn(name = "DEPARTMENT_ID",columnDefinition="varchar(100) not null comment '所在院系,引用字典类型表id'")
+	  @ManyToOne(targetEntity = Department.class)
+	  private Department department;
+	  
+	  /**
+	   * 所在院系
+	   */
+	  @JoinColumn(name = "MAJOR_ID",columnDefinition="varchar(100) not null comment '所在专业,引用专业表id'")
+	  @ManyToOne(targetEntity = Major.class)
+	  private Major major;
+	  /**
+	   * 年级
+	   */
+	  @Column(name = "YEAR", unique = true,columnDefinition="varchar(120) not null comment '年级（yyyy）'")
+	  private String year;
+	  
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED",columnDefinition="int(11) default 1 comment '是否可用'")
+	  private boolean enabled = true;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Department getDepartment() {
+		return department;
+	}
+
+	public void setDepartment(Department department) {
+		this.department = department;
+	}
+
+	public Major getMajor() {
+		return major;
+	}
+
+	public void setMajor(Major major) {
+		this.major = major;
+	}
+
+	public String getYear() {
+		return year;
+	}
+
+	public void setYear(String year) {
+		this.year = year;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+	  
+
+}
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Department.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Department.java
new file mode 100644
index 0000000..4b6e79e
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Department.java
@@ -0,0 +1,98 @@
+package com.supwisdom.leaveschool.basicsdata.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 部门院系
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_DEPARTMENT")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_DEPARTMENT",comment="部门院系表")
+public class Department extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4683990621975103576L;
+	
+	/**
+	   * 单位代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '单位代码'")
+	  private String code;
+	  
+	  /**
+	   * 单位简称
+	   */
+	  @Column(name = "NAME",columnDefinition="varchar(200) not null comment '单位简称'")
+	  private String name;
+	  /**
+	   * 单位英文名称
+	   */
+	  @Column(name = "EN_NAME",columnDefinition="varchar(200) not null comment '单位英文名称'")
+	  private String enName;
+	  /**
+	   * 排序
+	   */
+	  @Column(name = "SORT",columnDefinition="int(11) comment '排序'")
+	  private int sort;
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED",columnDefinition="int(11) default 1 comment '是否可用'")
+	  private boolean enabled = true;
+	  /**
+	   * 类别码
+	   */
+//	  @Column(name = "CLASS_CODE")
+	  @JoinColumn(name = "CLASS_CODE",columnDefinition="varchar(100) not null comment '类别码,引用字典类型表id'")
+	  @ManyToOne(targetEntity = Dictionary.class)
+	  private Dictionary classCode;
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getEnName() {
+		return enName;
+	}
+	public void setEnName(String enName) {
+		this.enName = enName;
+	}
+	public int getSort() {
+		return sort;
+	}
+	public void setSort(int sort) {
+		this.sort = sort;
+	}
+	public boolean isEnabled() {
+		return enabled;
+	}
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+	public Dictionary getClassCode() {
+		return classCode;
+	}
+	public void setClassCode(Dictionary classCode) {
+		this.classCode = classCode;
+	}
+	
+	  
+}
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Dictionary.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Dictionary.java
new file mode 100644
index 0000000..bf97839
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Dictionary.java
@@ -0,0 +1,99 @@
+package com.supwisdom.leaveschool.basicsdata.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 字典类
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_DICTIONARY")
+public class Dictionary extends ABaseDomain {
+
+ 
+
+  /**
+	 * 
+	 */
+	private static final long serialVersionUID = -7355785282419690119L;
+
+	/**
+	   * 类型码
+	   */
+	  @Column(name = "CODE", unique = true)
+	  private String code;
+	  
+	  /**
+	   * 名称
+	   */
+	  @Column(name = "NAME")
+	  private String name;
+	
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED")
+	  private boolean enabled = true;
+	  
+	  /**
+	   * 排序
+	   */
+	  @Column(name = "SORT")
+	  private Integer sort;
+	  
+	  /**
+	   * 字典表类型
+	   */
+	  @Column(name = "TB_B_DICTIONARY_TYPE_ID")
+	  private DictionaryType dictionaryType;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public Integer getSort() {
+		return sort;
+	}
+
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public DictionaryType getDictionaryType() {
+		return dictionaryType;
+	}
+
+	public void setDictionaryType(DictionaryType dictionaryType) {
+		this.dictionaryType = dictionaryType;
+	}
+	
+	  
+  
+
+}
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Major.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Major.java
new file mode 100644
index 0000000..ae202a0
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Major.java
@@ -0,0 +1,84 @@
+package com.supwisdom.leaveschool.basicsdata.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+/**
+ * 专业
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_MAJOR")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_MAJOR",comment="专业表")
+public class Major  extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6675237976684553494L;
+	
+	/**
+	   * 专业代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '专业代码'")
+	  private String code;
+	  
+	  /**
+	   * 所在院系
+	   */
+	  @JoinColumn(name = "DEPARTMENT_ID",columnDefinition="varchar(100) not null comment '所在院系,引用字典类型表id'")
+	  @ManyToOne(targetEntity = Department.class)
+	  private Department department;
+	  
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED",columnDefinition="int(11) default 1 comment '是否可用'")
+	  private boolean enabled = true;
+	  
+	  /**
+	   * 所属国标专业
+	   */
+	  @Column(name = "GB_MAJOR", columnDefinition="varchar(200) comment '所属国标专业'")
+	  private String gbMajor;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Department getDepartment() {
+		return department;
+	}
+
+	public void setDepartment(Department department) {
+		this.department = department;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public String getGbMajor() {
+		return gbMajor;
+	}
+
+	public void setGbMajor(String gbMajor) {
+		this.gbMajor = gbMajor;
+	}
+	  
+	  
+}
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Year.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Year.java
new file mode 100644
index 0000000..cfc4943
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/domain/Year.java
@@ -0,0 +1,52 @@
+package com.supwisdom.leaveschool.basicsdata.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 学年
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_YEAR")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_YEAR",comment="学年表")
+public class Year  extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1433208605775844971L;
+	
+	/**
+	   * 学年代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '学年代码'")
+	  private String code;
+	  
+	  /**
+	   * 学年名称
+	   */
+	  @Column(name = "NAME",columnDefinition="varchar(200) not null comment '学年名称'")
+	  private String name;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	  
+}
diff --git a/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/test/CreatreTableTest.java b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/test/CreatreTableTest.java
new file mode 100644
index 0000000..d280dba
--- /dev/null
+++ b/leaveschool/basics-data/src/main/java/com/supwisdom/leaveschool/basicsdata/test/CreatreTableTest.java
@@ -0,0 +1,15 @@
+package com.supwisdom.leaveschool.basicsdata.test;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CreatreTableTest {
+	@Test
+    public void updateTabletTest() throws Exception {
+		System.out.println("update table success.....");
+    }
+}
